From: Tom Gundersen Date: Wed, 21 May 2014 13:27:53 +0000 (+0200) Subject: sd-dhcp: make sure we can not fill options so much that there is no space for END X-Git-Tag: v213~61 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=2688ef60de061bf188c1153c58fb41a78919b97e;p=elogind.git sd-dhcp: make sure we can not fill options so much that there is no space for END --- diff --git a/src/libsystemd-network/dhcp-option.c b/src/libsystemd-network/dhcp-option.c index 68950923d..24f678c10 100644 --- a/src/libsystemd-network/dhcp-option.c +++ b/src/libsystemd-network/dhcp-option.c @@ -31,6 +31,10 @@ int dhcp_option_append(uint8_t options[], size_t size, size_t *offset, assert(options); assert(offset); + if (code != DHCP_OPTION_END) + /* always make sure there is space for an END option */ + size --; + switch (code) { case DHCP_OPTION_PAD: diff --git a/src/libsystemd-network/test-dhcp-option.c b/src/libsystemd-network/test-dhcp-option.c index eaf6a535e..3dd7102d8 100644 --- a/src/libsystemd-network/test-dhcp-option.c +++ b/src/libsystemd-network/test-dhcp-option.c @@ -85,7 +85,7 @@ static void test_invalid_buffer_length(void) static void test_message_init(void) { _cleanup_free_ DHCPMessage *message = NULL; - size_t optlen = 3, optoffset; + size_t optlen = 4, optoffset; size_t len = sizeof(DHCPMessage) + optlen; uint8_t *magic;