From c0b927eb3ad800062fc6d6d38a4bf678f897974e Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 16 Nov 2023 02:17:22 +0900 Subject: [PATCH] dhcp: do not trigger assertion by malformed messages This also changes error code from -ENODATA -> -EBADMSG, as we received bad message in that case. Prompted by #30029. --- src/libsystemd-network/sd-dhcp-lease.c | 5 ++++- src/libsystemd-network/test-sd-dhcp-lease.c | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index 4925fa8f193..4e3be98a33a 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -931,7 +931,10 @@ int dhcp_lease_parse_search_domains(const uint8_t *option, size_t len, char ***d int r; assert(domains); - assert_return(option && len > 0, -ENODATA); + assert(option || len == 0); + + if (len == 0) + return -EBADMSG; while (pos < len) { _cleanup_free_ char *name = NULL; diff --git a/src/libsystemd-network/test-sd-dhcp-lease.c b/src/libsystemd-network/test-sd-dhcp-lease.c index 3eea1b0d9b8..910b622191c 100644 --- a/src/libsystemd-network/test-sd-dhcp-lease.c +++ b/src/libsystemd-network/test-sd-dhcp-lease.c @@ -60,8 +60,8 @@ TEST(dhcp_lease_parse_search_domains_no_data) { _cleanup_strv_free_ char **domains = NULL; static const uint8_t optionbuf[3] = {0, 0, 0}; - assert_se(dhcp_lease_parse_search_domains(NULL, 0, &domains) == -ENODATA); - assert_se(dhcp_lease_parse_search_domains(optionbuf, 0, &domains) == -ENODATA); + assert_se(dhcp_lease_parse_search_domains(NULL, 0, &domains) == -EBADMSG); + assert_se(dhcp_lease_parse_search_domains(optionbuf, 0, &domains) == -EBADMSG); } TEST(dhcp_lease_parse_search_domains_loops) { -- 2.47.3