diff options
author | Tom Gundersen <teg@jklm.no> | 2014-05-21 15:27:53 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-05-21 15:27:53 +0200 |
commit | 2688ef60de061bf188c1153c58fb41a78919b97e (patch) | |
tree | a9f537b1475a59ef71a75755fd8460d5a2b32c8d /src | |
parent | f5602be9da8ba0c0cc4865398aa7fa99ad447d56 (diff) |
sd-dhcp: make sure we can not fill options so much that there is no space for END
Diffstat (limited to 'src')
-rw-r--r-- | src/libsystemd-network/dhcp-option.c | 4 | ||||
-rw-r--r-- | src/libsystemd-network/test-dhcp-option.c | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/libsystemd-network/dhcp-option.c b/src/libsystemd-network/dhcp-option.c index 68950923dd..24f678c100 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 eaf6a535e6..3dd7102d82 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; |