]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: also fuzz packets sent in the DHCP6_STATE_SOLICITATION state
authorEvgeny Vereshchagin <evvers@ya.ru>
Fri, 4 Feb 2022 15:17:25 +0000 (15:17 +0000)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 5 Feb 2022 05:50:12 +0000 (14:50 +0900)
With aborts enabled the fuzzer can catch issues like
https://github.com/systemd/systemd/commit/26a63b81322a3bd8b9fbd43f75897c391708de2c
Let's extend it a bit to let it cover issues like
https://github.com/systemd/systemd/pull/22406#discussion_r798932098

src/libsystemd-network/fuzz-dhcp6-client-send.c

index 48401410f611bba398f420db1487e7d0b61d2bd6..39a5f4fd4dda6b6a28d49594b2a8193977b40c77 100644 (file)
@@ -44,14 +44,16 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         assert_se(sd_dhcp6_client_set_transaction_id(client, htobe32(0x00ffffff) & ((const DHCP6Message *) data)->transaction_id) == 0);
 
         triple_timestamp_get(&t);
-        if (client_receive_advertise(client, (DHCP6Message *) data, size, &t, NULL) != DHCP6_STATE_REQUEST)
+        r = client_receive_advertise(client, (DHCP6Message *) data, size, &t, NULL);
+        if (r < 0)
                 goto cleanup;
 
         r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
         if (r < 0)
                 goto cleanup;
 
-        client->state = DHCP6_STATE_REQUEST;
+        if (r == DHCP6_STATE_REQUEST)
+                client->state = DHCP6_STATE_REQUEST;
         (void) client_send_message(client, time_now);
 cleanup:
         assert_se(sd_dhcp6_client_stop(client) >= 0);