mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
loader: verify the value from dhcp.interface-mtu and use snprintf to set mtu
Since the uset can set dhcp.interface-mtu, we need to try to validate the value. So we verify if the conversion to int is successful and we will not allow to set value greater than max IPv4 packet size. Also use snprintf for safety. Reviewed by: allanjude, bapt Approved by: allanjude (mentor) Differential Revision: https://reviews.freebsd.org/D8492
This commit is contained in:
parent
98339da12a
commit
c1e968fb62
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=315653
|
@ -39,6 +39,7 @@
|
|||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/limits.h>
|
||||
#include <sys/endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/in_systm.h>
|
||||
|
@ -403,11 +404,29 @@ vend_rfc1048(cp, len)
|
|||
strlcpy(hostname, val, sizeof(hostname));
|
||||
}
|
||||
if (tag == TAG_INTF_MTU) {
|
||||
intf_mtu = 0;
|
||||
if ((val = getenv("dhcp.interface-mtu")) != NULL) {
|
||||
intf_mtu = (u_int)strtoul(val, NULL, 0);
|
||||
} else {
|
||||
intf_mtu = be16dec(cp);
|
||||
unsigned long tmp;
|
||||
char *end;
|
||||
|
||||
errno = 0;
|
||||
/*
|
||||
* Do not allow MTU to exceed max IPv4 packet
|
||||
* size, max value of 16-bit word.
|
||||
*/
|
||||
tmp = strtoul(val, &end, 0);
|
||||
if (errno != 0 ||
|
||||
*val == '\0' || *end != '\0' ||
|
||||
tmp > USHRT_MAX) {
|
||||
printf("%s: bad value: \"%s\", "
|
||||
"ignoring\n",
|
||||
"dhcp.interface-mtu", val);
|
||||
} else {
|
||||
intf_mtu = (u_int)tmp;
|
||||
}
|
||||
}
|
||||
if (intf_mtu <= 0)
|
||||
intf_mtu = be16dec(cp);
|
||||
}
|
||||
#ifdef SUPPORT_DHCP
|
||||
if (tag == TAG_DHCP_MSGTYPE) {
|
||||
|
|
|
@ -175,7 +175,7 @@ net_open(struct open_file *f, ...)
|
|||
}
|
||||
if (intf_mtu != 0) {
|
||||
char mtu[16];
|
||||
sprintf(mtu, "%u", intf_mtu);
|
||||
snprintf(mtu, sizeof(mtu), "%u", intf_mtu);
|
||||
setenv("boot.netif.mtu", mtu, 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -342,7 +342,7 @@ pxe_open(struct open_file *f, ...)
|
|||
}
|
||||
if (intf_mtu != 0) {
|
||||
char mtu[16];
|
||||
sprintf(mtu, "%u", intf_mtu);
|
||||
snprintf(sizeof(mtu), mtu, "%u", intf_mtu);
|
||||
setenv("boot.netif.mtu", mtu, 1);
|
||||
}
|
||||
printf("pxe_open: server addr: %s\n", inet_ntoa(rootip));
|
||||
|
|
Loading…
Reference in a new issue