]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp6-client: do not expose set_transaction_id()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 7 Feb 2022 04:56:36 +0000 (13:56 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Feb 2022 05:58:49 +0000 (14:58 +0900)
This is mostly for tests or fuzzers. Hence, this makes the function
requires that the client is running in the test mode.

Also, now the function mask the value for message type.

src/libsystemd-network/dhcp6-internal.h
src/libsystemd-network/fuzz-dhcp6-client-send.c
src/libsystemd-network/fuzz-dhcp6-client.c
src/libsystemd-network/sd-dhcp6-client.c
src/systemd/sd-dhcp6-client.h

index 75bf879540d7b9fdac4ddff1d79fdb3be7669e11..aefcdc2d36f40c8098711024e9de423591720fb5 100644 (file)
@@ -173,6 +173,7 @@ const char *dhcp6_message_status_to_string(DHCP6Status s) _const_;
 DHCP6Status dhcp6_message_status_from_string(const char *s) _pure_;
 
 void dhcp6_client_set_test_mode(sd_dhcp6_client *client, bool test_mode);
+int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id);
 
 #define log_dhcp6_client_errno(client, error, fmt, ...)         \
         log_interface_prefix_full_errno(                        \
index 906c835b0398e72cec45bb9cc7f48780c1118760..16a71e72d30204187fce9a2517f98ff301d36095 100644 (file)
@@ -39,7 +39,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         assert_se(sd_dhcp6_client_set_information_request(client, false) == 0);
         dhcp6_client_set_test_mode(client, true);
         assert_se(sd_dhcp6_client_start(client) >= 0);
-        assert_se(sd_dhcp6_client_set_transaction_id(client, htobe32(0x00ffffff) & ((const DHCP6Message *) data)->transaction_id) == 0);
+        assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message *) data)->transaction_id) == 0);
 
         r = client_process_advertise_or_rapid_commit_reply(client, (DHCP6Message *) data, size, NULL, NULL);
         if (r < 0)
index f62ab468df342fd511133f404068a8662cf66f76..10dbead21ca39bbf77fdb1f423f18dd8735a3417 100644 (file)
@@ -38,7 +38,7 @@ static void fuzz_client(const uint8_t *data, size_t size, bool is_information_re
         assert_se(sd_dhcp6_client_start(client) >= 0);
 
         if (size >= sizeof(DHCP6Message))
-                assert_se(sd_dhcp6_client_set_transaction_id(client, htobe32(0x00ffffff) & ((const DHCP6Message *) data)->transaction_id) == 0);
+                assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message *) data)->transaction_id) == 0);
 
         assert_se(write(test_dhcp_fd[1], data, size) == (ssize_t) size);
 
index b59dce74a9720968f884b9a1f233e695db48a22d..1d1e2633063367e36a5661950908a0b39a889a55 100644 (file)
@@ -592,10 +592,13 @@ int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client, int request) {
         return 0;
 }
 
-int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) {
-        assert_return(client, -EINVAL);
+int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) {
+        assert(client);
+        assert(client->test_mode);
+
+        /* This is for tests or fuzzers. */
 
-        client->transaction_id = transaction_id;
+        client->transaction_id = transaction_id & htobe32(0x00ffffff);
 
         return 0;
 }
index d857af5acf65df293b8d4bc90808a36268c349ce..1bb21e0255d265fd2e8a2328c66b3082b69432be 100644 (file)
@@ -260,8 +260,6 @@ int sd_dhcp6_client_get_address_request(sd_dhcp6_client *client,
                                         int *request);
 int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client,
                                         int request);
-int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client,
-                                       uint32_t transaction_id);
 int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client,
                                       sd_dhcp6_option *v);