]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/fuzz/fuzz-dhcp-server.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 Copyright 2018 Jonathan Rudenberg
8 #include "sd-dhcp-server.c"
10 /* stub out network so that the server doesn't send */
11 ssize_t
sendto(int sockfd
, const void *buf
, size_t len
, int flags
, const struct sockaddr
*dest_addr
, socklen_t addrlen
) {
15 ssize_t
sendmsg(int sockfd
, const struct msghdr
*msg
, int flags
) {
19 int LLVMFuzzerTestOneInput(const uint8_t *data
, size_t size
) {
20 _cleanup_(sd_dhcp_server_unrefp
) sd_dhcp_server
*server
= NULL
;
21 struct in_addr address
= {.s_addr
= htobe32(UINT32_C(10) << 24 | UINT32_C(1))};
22 static const uint8_t chaddr
[] = {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
27 if (size
< sizeof(DHCPMessage
))
30 assert_se(sd_dhcp_server_new(&server
, 1) >= 0);
31 server
->fd
= open("/dev/null", O_RDWR
|O_CLOEXEC
|O_NOCTTY
);
32 assert_se(server
->fd
>= 0);
33 assert_se(sd_dhcp_server_configure_pool(server
, &address
, 24, 0, 0) >= 0);
35 /* add a lease to the pool to expose additional code paths */
36 client_id
= malloc(2);
40 lease
= new0(DHCPLease
, 1);
42 lease
->client_id
.length
= 2;
43 lease
->client_id
.data
= client_id
;
44 lease
->address
= htobe32(UINT32_C(10) << 24 | UINT32_C(2));
45 lease
->gateway
= htobe32(UINT32_C(10) << 24 | UINT32_C(1));
46 lease
->expiration
= UINT64_MAX
;
47 memcpy(lease
->chaddr
, chaddr
, 16);
48 pool_offset
= get_pool_offset(server
, lease
->address
);
49 server
->bound_leases
[pool_offset
] = lease
;
50 assert_se(hashmap_put(server
->leases_by_client_id
, &lease
->client_id
, lease
) >= 0);
52 (void) dhcp_server_handle_message(server
, (DHCPMessage
*)data
, size
);