Coverage Report

Created: 2026-11-12 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openiked-portable/regress/parser-libfuzzer/common.c
Line
Count
Source
1
/*  $OpenBSD: common.c,v 1.9 2020/11/26 22:29:32 tobhe Exp $ */
2
/*
3
 * A bunch of stub functions so we can compile and link ikev2_pld.c
4
 * in a standalone program for testing purposes.
5
 *
6
 * Placed in the public domain
7
 */
8
9
#include <sys/socket.h>
10
#include <sys/time.h>
11
#include <sys/uio.h>
12
13
#include <event.h>
14
#include <limits.h>
15
#include <string.h>
16
17
#include "iked.h"
18
#include "types.h"
19
20
40.9k
#define IKEV2_FLAG_INITIATOR            0x08    /* Sent by the initiator */
21
22
int  eap_parse(struct iked *, const struct iked_sa *,
23
      struct iked_message *, void *, int);
24
int  ikev2_msg_frompeer(struct iked_message *);
25
int  ikev2_send_ike_e(struct iked *, struct iked_sa *, struct ibuf *,
26
      u_int8_t, u_int8_t, int);
27
void   ikev2_ikesa_recv_delete(struct iked *, struct iked_sa *);
28
struct iked_childsa *
29
   childsa_lookup(struct iked_sa *, u_int64_t, u_int8_t);
30
int   ikev2_childsa_delete(struct iked *, struct iked_sa *,
31
      u_int8_t, u_int64_t, u_int64_t *, int);
32
int  sa_stateok(const struct iked_sa *, int);
33
void   sa_state(struct iked *, struct iked_sa *, int);
34
void   ikev2_disable_rekeying(struct iked *, struct iked_sa *);
35
void   ikev2_init_ike_sa(struct iked *, void *);
36
struct dh_group *
37
   group_get(u_int32_t);
38
void   timer_set(struct iked *, struct iked_timer *,
39
       void (*)(struct iked *, void *), void *);
40
void   timer_add(struct iked *, struct iked_timer *, int);
41
void   timer_del(struct iked *, struct iked_timer *);
42
ssize_t  ikev2_nat_detection(struct iked *, struct iked_message *,
43
       void *, size_t, u_int, int);
44
int  ca_setreq(struct iked *, struct iked_sa *, struct iked_static_id *,
45
       u_int8_t, u_int8_t, u_int8_t *, size_t, enum privsep_procid);
46
int  ikev2_print_id(struct iked_id *, char *, size_t);
47
int  config_add_transform(struct iked_proposal *, u_int, u_int, u_int,
48
       u_int);
49
struct iked_proposal *
50
   config_add_proposal(struct iked_proposals *, u_int, u_int);
51
void   config_free_proposal(struct iked_proposals *, struct iked_proposal *);
52
int  ikev2_send_informational(struct iked *, struct iked_message *);
53
struct ibuf *
54
   ikev2_msg_decrypt(struct iked *, struct iked_sa *, struct ibuf *,
55
       struct ibuf *);
56
void ikev2_msg_cleanup(struct iked *, struct iked_message *);
57
58
int
59
eap_parse(struct iked *env, const struct iked_sa *sa, struct iked_message *msg,
60
    void *data, int response)
61
350
{
62
350
  return (0);
63
350
}
64
65
/* Copied from ikev2_msg.c for better coverage */
66
int
67
ikev2_msg_frompeer(struct iked_message *msg)
68
40.9k
{
69
40.9k
  struct iked_sa    *sa = msg->msg_sa;
70
40.9k
  struct ike_header *hdr;
71
72
40.9k
  msg = msg->msg_parent;
73
74
40.9k
  if (sa == NULL ||
75
40.9k
      (hdr = ibuf_seek(msg->msg_data, 0, sizeof(*hdr))) == NULL)
76
0
    return (0);
77
78
40.9k
  if (!sa->sa_hdr.sh_initiator &&
79
40.9k
      (hdr->ike_flags & IKEV2_FLAG_INITIATOR))
80
13.2k
    return (1);
81
27.7k
  else if (sa->sa_hdr.sh_initiator &&
82
0
      (hdr->ike_flags & IKEV2_FLAG_INITIATOR) == 0)
83
0
    return (1);
84
85
27.7k
  return (0);
86
40.9k
}
87
88
int
89
ikev2_send_ike_e(struct iked *env, struct iked_sa *sa, struct ibuf *buf,
90
    u_int8_t firstpayload, u_int8_t exchange, int response)
91
0
{
92
0
  return (0);
93
0
}
94
95
void
96
ikev2_ikesa_recv_delete(struct iked *env, struct iked_sa *sa)
97
0
{
98
0
}
99
100
const char *
101
ikev2_ikesa_info(uint64_t spi, const char *msg)
102
1.31k
{
103
1.31k
  return "";
104
1.31k
}
105
106
struct iked_childsa *
107
childsa_lookup(struct iked_sa *a, u_int64_t b, u_int8_t c)
108
0
{
109
0
  return (NULL);
110
0
}
111
112
int
113
ikev2_childsa_delete(struct iked *a, struct iked_sa *b, u_int8_t c,
114
    u_int64_t d, u_int64_t *e , int f)
115
0
{
116
0
  return (0);
117
0
}
118
119
int
120
sa_stateok(const struct iked_sa *a, int b)
121
221
{
122
221
  return (0);
123
221
}
124
125
void
126
sa_state(struct iked * a, struct iked_sa *b, int c)
127
0
{
128
0
}
129
130
void
131
ikev2_disable_rekeying(struct iked *a, struct iked_sa *b)
132
0
{
133
0
}
134
135
void
136
ikev2_init_ike_sa(struct iked *a, void *b)
137
0
{
138
0
}
139
140
const struct group_id *
141
group_getid(u_int32_t id)
142
0
{
143
0
  return (NULL);
144
0
}
145
146
void
147
timer_set(struct iked *env, struct iked_timer *tmr,
148
    void (*cb)(struct iked *, void *), void *arg)
149
0
{
150
0
}
151
152
void
153
timer_add(struct iked *env, struct iked_timer *tmr, int timeout)
154
0
{
155
0
}
156
157
void
158
timer_del(struct iked *env, struct iked_timer *tmr)
159
0
{
160
0
}
161
162
ssize_t
163
ikev2_nat_detection(struct iked *env, struct iked_message *msg,
164
    void *ptr, size_t len, u_int type, int frompeer)
165
412
{
166
412
  bzero(ptr, len);
167
412
  return (0);
168
412
}
169
170
int
171
ca_setreq(struct iked *env, struct iked_sa *sh, struct iked_static_id *localid,
172
    u_int8_t type, u_int8_t more, u_int8_t *data, size_t len,
173
    enum privsep_procid procid)
174
0
{
175
0
  return (0);
176
0
}
177
178
int
179
ikev2_print_id(struct iked_id *id, char *idstr, size_t idstrlen)
180
625
{
181
625
  return (0);
182
625
}
183
184
int
185
config_add_transform(struct iked_proposal *prop, u_int type,
186
    u_int id, u_int length, u_int keylength)
187
0
{
188
0
  return (0);
189
0
}
190
191
struct iked_proposal *
192
config_add_proposal(struct iked_proposals *head, u_int id, u_int proto)
193
4
{
194
4
  return (NULL);
195
4
}
196
197
void
198
config_free_proposal(struct iked_proposals *head, struct iked_proposal *prop)
199
0
{
200
0
  return;
201
0
}
202
203
/* copied from config.c */
204
void config_free_fragments(struct iked_frag *frag)
205
2.56k
{
206
2.56k
  size_t i;
207
208
2.56k
  if (frag && frag->frag_arr) {
209
899
    for (i = 0; i < frag->frag_total; i++) {
210
866
      if (frag->frag_arr[i] != NULL)
211
33
        free(frag->frag_arr[i]->frag_data);
212
866
      free(frag->frag_arr[i]);
213
866
    }
214
33
    free(frag->frag_arr);
215
33
    bzero(frag, sizeof(struct iked_frag));
216
33
  }
217
2.56k
}
218
219
int
220
ikev2_send_informational(struct iked *env, struct iked_message *msg)
221
975
{
222
975
  return (0);
223
975
}
224
225
struct ibuf *
226
ikev2_msg_decrypt(struct iked *env, struct iked_sa *sa,
227
    struct ibuf *msg, struct ibuf *src)
228
1.21k
{
229
1.21k
  if (src == NULL){
230
0
                fprintf(stderr, "%s\n", "msg_decrypt: src == NULL!");
231
0
                exit(-1);
232
0
        }
233
234
  /* do no really decryption */
235
1.21k
  return (src);
236
1.21k
}
237
238
void
239
ikev2_ike_sa_setreason(struct iked_sa *sa, char *r)
240
0
{
241
0
}
242
243
void
244
ikev2_msg_flushqueue(struct iked *env, struct iked_msgqueue *queue)
245
0
{
246
0
}
247
248
struct iked_msg_retransmit *
249
ikev2_msg_lookup(struct iked *env, struct iked_msgqueue *queue,
250
    struct iked_message *msg, uint8_t exchange)
251
0
{
252
0
  return NULL;
253
0
}
254
255
/* copied from ikev2_msg.c */
256
void
257
ikev2_msg_cleanup(struct iked *env, struct iked_message *msg)
258
2.53k
{
259
2.53k
  struct iked_certreq *cr;
260
2.53k
  struct iked_proposal *prop, *proptmp;
261
2.53k
  int      i;
262
263
2.53k
  if (msg == msg->msg_parent) {
264
2.53k
    ibuf_free(msg->msg_nonce);
265
2.53k
    ibuf_free(msg->msg_ke);
266
2.53k
    ibuf_free(msg->msg_auth.id_buf);
267
2.53k
    ibuf_free(msg->msg_peerid.id_buf);
268
2.53k
    ibuf_free(msg->msg_localid.id_buf);
269
2.53k
    ibuf_free(msg->msg_cert.id_buf);
270
10.1k
    for (i = 0; i < IKED_SCERT_MAX; i++)
271
7.59k
      ibuf_free(msg->msg_scert[i].id_buf);
272
2.53k
    ibuf_free(msg->msg_cookie);
273
2.53k
    ibuf_free(msg->msg_cookie2);
274
2.53k
    ibuf_free(msg->msg_del_buf);
275
2.53k
    free(msg->msg_eap.eam_user);
276
2.53k
    free(msg->msg_cp_addr);
277
2.53k
    free(msg->msg_cp_addr6);
278
2.53k
    free(msg->msg_cp_dns);
279
280
2.53k
    TAILQ_FOREACH_SAFE(prop, &msg->msg_proposals, prop_entry,
281
2.53k
        proptmp) {
282
0
      TAILQ_REMOVE(&msg->msg_proposals, prop, prop_entry);
283
0
      if (prop->prop_nxforms)
284
0
        free(prop->prop_xforms);
285
0
      free(prop);
286
0
    }
287
288
2.53k
    msg->msg_nonce = NULL;
289
2.53k
    msg->msg_ke = NULL;
290
2.53k
    msg->msg_auth.id_buf = NULL;
291
2.53k
    msg->msg_peerid.id_buf = NULL;
292
2.53k
    msg->msg_localid.id_buf = NULL;
293
2.53k
    msg->msg_cert.id_buf = NULL;
294
10.1k
    for (i = 0; i < IKED_SCERT_MAX; i++)
295
7.59k
      msg->msg_scert[i].id_buf = NULL;
296
2.53k
    msg->msg_cookie = NULL;
297
2.53k
    msg->msg_cookie2 = NULL;
298
2.53k
    msg->msg_del_buf = NULL;
299
2.53k
    msg->msg_eap.eam_user = NULL;
300
2.53k
    msg->msg_cp_addr = NULL;
301
2.53k
    msg->msg_cp_addr6 = NULL;
302
2.53k
    msg->msg_cp_dns = NULL;
303
304
5.14k
    while ((cr = SIMPLEQ_FIRST(&msg->msg_certreqs))) {
305
2.61k
      ibuf_free(cr->cr_data);
306
2.61k
      SIMPLEQ_REMOVE_HEAD(&msg->msg_certreqs, cr_entry);
307
2.61k
      free(cr);
308
2.61k
    }
309
2.53k
  }
310
311
2.53k
  if (msg->msg_data != NULL) {
312
2.53k
    ibuf_free(msg->msg_data);
313
    msg->msg_data = NULL;
314
2.53k
  }
315
2.53k
}