summaryrefslogtreecommitdiffstats
path: root/net/ipv4/ipconfig.c
diff options
context:
space:
mode:
authorChris Novakovic <chris@chrisn.me.uk>2018-04-24 03:56:35 +0100
committerDavid S. Miller <davem@davemloft.net>2018-04-24 13:40:41 -0400
commitde1fa15b6642f0b66f1844b9b464a8c28e84347c (patch)
treedffa5c3adf8ca466eb5e9fdea8a7016cabf50c47 /net/ipv4/ipconfig.c
parent4e1a8af28d56a4194cf3f17c69d9d21183246f3a (diff)
downloadlinux-de1fa15b6642f0b66f1844b9b464a8c28e84347c.tar.gz
linux-de1fa15b6642f0b66f1844b9b464a8c28e84347c.tar.bz2
linux-de1fa15b6642f0b66f1844b9b464a8c28e84347c.zip
ipconfig: BOOTP: Request CONF_NAMESERVERS_MAX name servers
When ipconfig is autoconfigured via BOOTP, the request packet initialised by ic_bootp_init_ext() always allocates 8 bytes for the name server option, limiting the BOOTP server to responding with at most 2 name servers even though ipconfig in fact supports an arbitrary number of name servers (as defined by CONF_NAMESERVERS_MAX, which is currently 3). Only request name servers in the request packet if CONF_NAMESERVERS_MAX is positive (to comply with [1, ยง3.8]), and allocate enough space in the packet for CONF_NAMESERVERS_MAX name servers to indicate the maximum number we can accept in response. [1] RFC 2132, "DHCP Options and BOOTP Vendor Extensions": https://tools.ietf.org/rfc/rfc2132.txt Signed-off-by: Chris Novakovic <chris@chrisn.me.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ipconfig.c')
-rw-r--r--net/ipv4/ipconfig.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index bcf3c4f9882d..0f460d6d3cce 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -721,9 +721,11 @@ static void __init ic_bootp_init_ext(u8 *e)
*e++ = 3; /* Default gateway request */
*e++ = 4;
e += 4;
+#if CONF_NAMESERVERS_MAX > 0
*e++ = 6; /* (DNS) name server request */
- *e++ = 8;
- e += 8;
+ *e++ = 4 * CONF_NAMESERVERS_MAX;
+ e += 4 * CONF_NAMESERVERS_MAX;
+#endif
*e++ = 12; /* Host name request */
*e++ = 32;
e += 32;