Skip to content

Commit 99a2893

Browse files
pdgendtkartben
authored andcommitted
net: lib: dhcpv4: Skip leftover hostname or domain name bytes
When reading and printing hosname or domain name from DHCP options, we need to skip the leftover bytes that do not fit into the provided buffers. Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
1 parent 836cf37 commit 99a2893

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

subsys/net/lib/dhcpv4/dhcpv4.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,14 +1081,16 @@ static bool dhcpv4_parse_options(struct net_pkt *pkt,
10811081
}
10821082
case DHCPV4_OPTIONS_HOST_NAME: {
10831083
char hostname[NET_HOSTNAME_SIZE] = { 0 };
1084+
uint8_t read_len;
10841085

10851086
if (length < 1) {
10861087
NET_ERR("options_host_name, bad length");
10871088
return false;
10881089
}
10891090

1090-
if (net_pkt_read(pkt, hostname, MIN(length,
1091-
sizeof(hostname) - 1))) {
1091+
read_len = MIN(length, sizeof(hostname) - 1);
1092+
if (net_pkt_read(pkt, hostname, read_len) ||
1093+
net_pkt_skip(pkt, length - read_len)) {
10921094
NET_ERR("options_host_name, short packet");
10931095
return false;
10941096
}
@@ -1099,14 +1101,16 @@ static bool dhcpv4_parse_options(struct net_pkt *pkt,
10991101
}
11001102
case DHCPV4_OPTIONS_DOMAIN_NAME: {
11011103
char domain_name[NET_HOSTNAME_SIZE] = { 0 };
1104+
uint8_t read_len;
11021105

11031106
if (length < 1) {
11041107
NET_ERR("options_domain_name, bad length");
11051108
return false;
11061109
}
11071110

1108-
if (net_pkt_read(pkt, domain_name, MIN(length,
1109-
sizeof(domain_name) - 1))) {
1111+
read_len = MIN(length, sizeof(domain_name) - 1);
1112+
if (net_pkt_read(pkt, domain_name, read_len) ||
1113+
net_pkt_skip(pkt, length - read_len)) {
11101114
NET_ERR("options_domain_name, short packet");
11111115
return false;
11121116
}

0 commit comments

Comments
 (0)