/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 | } |