[PATCH v2] udhcpc: ignore zero-length DHCP options
Denys Vlasenko
vda.linux at googlemail.com
Tue Mar 16 10:43:23 UTC 2021
Applied, thanks.
On Tue, Mar 16, 2021 at 7:52 AM Russell Senior
<russell at personaltelco.net> wrote:
>
>
> Discovered that the DHCP server on a TrendNet router (unknown model)
> provides a zero-length option 12 (Host Name) in the DHCP ACK message. This
> has the effect of causing udhcpc to drop the rest of the options, including
> option 51 (IP Address Lease Time), 3 (Router), and 6 (Domain Name Server),
> most importantly leaving the OpenWrt device with no default gateway.
>
> The TrendNet behavior violates RFC 2132, which in Section 3.14 declares that
> option 12 has a miniumum length of 1 octet. It is perhaps not a cosmic
> coincidence that I found this behavior on Pi Day.
>
> This patch allows zero length options without bailing out, by simply
> skipping them.
>
> v2 changelog:
> * advance the optionptr by two bytes, not one;
> * add a message to warn about the rfc violation;
>
> Signed-off-by: Russell Senior <russell at personaltelco.net>
> ---
> networking/udhcp/common.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c
> index 4bc719001..a16fd85d0 100644
> --- a/networking/udhcp/common.c
> +++ b/networking/udhcp/common.c
> @@ -277,8 +277,13 @@ uint8_t* FAST_FUNC udhcp_scan_options(struct dhcp_packet *packet, struct dhcp_sc
> goto complain; /* complain and return NULL */
> len = 2 + scan_state->optionptr[OPT_LEN];
> scan_state->rem -= len;
> - /* So far no valid option with length 0 known. */
> - if (scan_state->rem < 0 || scan_state->optionptr[OPT_LEN] == 0)
> + /* skip any options with zero length */
> + if (scan_state->optionptr[OPT_LEN] == 0) {
> + scan_state->optionptr += 2;
> + bb_simple_error_msg("warning: zero length DHCP option violates rfc2132, skipping");
> + continue;
> + }
> + if (scan_state->rem < 0)
> goto complain; /* complain and return NULL */
>
> if (scan_state->optionptr[OPT_CODE] == DHCP_OPTION_OVERLOAD) {
> --
> 2.30.1
>
>
> --
> Russell Senior, President
> russell at personaltelco.net
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list