From: Alan T. DeKok Date: Fri, 2 Oct 2020 15:54:37 +0000 (-0400) Subject: fix fr_dhcpv6_ok() for relay message X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bf77073f036935a75c2e47ca38853d4dc9249e29;p=thirdparty%2Ffreeradius-server.git fix fr_dhcpv6_ok() for relay message --- diff --git a/src/protocols/dhcpv6/base.c b/src/protocols/dhcpv6/base.c index 6897931b549..763d8f84496 100644 --- a/src/protocols/dhcpv6/base.c +++ b/src/protocols/dhcpv6/base.c @@ -183,15 +183,21 @@ bool fr_dhcpv6_ok(uint8_t const *packet, size_t packet_len, uint8_t const *end; uint32_t attributes; - /* - * 8 bit code + 24 bits of transaction ID - */ - if (packet_len < 4) return false; + if ((packet[0] == FR_DHCPV6_RELAY_FORWARD) || + (packet[0] == FR_DHCPV6_RELAY_REPLY)) { + if (packet_len < 2 + 32) return false; - if (packet_len == 4) return true; + p = packet + 2 + 32; + } else { + /* + * 8 bit code + 24 bits of transaction ID + */ + if (packet_len < 4) return false; + + p = packet + 4; + } attributes = 0; - p = packet + 4; end = packet + packet_len; while (p < end) {