From: Yu Watanabe Date: Wed, 15 Nov 2023 17:17:22 +0000 (+0900) Subject: dhcp: do not trigger assertion by malformed messages X-Git-Tag: v255-rc3~59^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0b927eb3ad800062fc6d6d38a4bf678f897974e;p=thirdparty%2Fsystemd.git 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. --- 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) {