| From 74d9f1ba37010face4bd1449df4d60dd84450b06 Mon Sep 17 00:00:00 2001 |
| From: Denys Vlasenko <vda.linux@googlemail.com> |
| Date: Mon, 7 Jan 2019 15:33:42 +0100 |
| Subject: udhcpc: when decoding DHCP_SUBNET, ensure it is 4 bytes long |
| |
| function old new delta |
| udhcp_run_script 795 801 +6 |
| |
| Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> |
| Signed-off-by: Jared Bents <jared.bents@rockwellcollins.com> |
| --- |
| networking/udhcp/common.c | 2 +- |
| networking/udhcp/common.h | 2 +- |
| networking/udhcp/dhcpc.c | 2 +- |
| 3 files changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c |
| index 4c2221b77..fc4de5716 100644 |
| --- a/networking/udhcp/common.c |
| +++ b/networking/udhcp/common.c |
| @@ -302,7 +302,7 @@ uint8_t* FAST_FUNC udhcp_get_option32(struct dhcp_packet *packet, int code) |
| { |
| uint8_t *r = udhcp_get_option(packet, code); |
| if (r) { |
| - if (r[-1] != 4) |
| + if (r[-OPT_DATA + OPT_LEN] != 4) |
| r = NULL; |
| } |
| return r; |
| diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h |
| index 9511152ff..62f9a2a4a 100644 |
| --- a/networking/udhcp/common.h |
| +++ b/networking/udhcp/common.h |
| @@ -119,7 +119,7 @@ enum { |
| //#define DHCP_TIME_SERVER 0x04 /* RFC 868 time server (32-bit, 0 = 1.1.1900) */ |
| //#define DHCP_NAME_SERVER 0x05 /* IEN 116 _really_ ancient kind of NS */ |
| //#define DHCP_DNS_SERVER 0x06 |
| -//#define DHCP_LOG_SERVER 0x07 /* port 704 UDP log (not syslog) |
| +//#define DHCP_LOG_SERVER 0x07 /* port 704 UDP log (not syslog) */ |
| //#define DHCP_COOKIE_SERVER 0x08 /* "quote of the day" server */ |
| //#define DHCP_LPR_SERVER 0x09 |
| #define DHCP_HOST_NAME 0x0c /* 12: either client informs server or server gives name to client */ |
| diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c |
| index 5b3fd531c..dcec8cdfd 100644 |
| --- a/networking/udhcp/dhcpc.c |
| +++ b/networking/udhcp/dhcpc.c |
| @@ -531,7 +531,7 @@ static char **fill_envp(struct dhcp_packet *packet) |
| temp = udhcp_get_option(packet, code); |
| *curr = xmalloc_optname_optval(temp, &dhcp_optflags[i], opt_name); |
| putenv(*curr++); |
| - if (code == DHCP_SUBNET) { |
| + if (code == DHCP_SUBNET && temp[-OPT_DATA + OPT_LEN] == 4) { |
| /* Subnet option: make things like "$ip/$mask" possible */ |
| uint32_t subnet; |
| move_from_unaligned32(subnet, temp); |
| -- |
| cgit v1.2.1 |
| |