dhcpv6: avoid parsing unncessary IAs
authorHans Dedecker <dedeckeh@gmail.com>
Fri, 11 Jan 2019 09:25:12 +0000 (10:25 +0100)
committerHans Dedecker <dedeckeh@gmail.com>
Fri, 11 Jan 2019 09:31:11 +0000 (10:31 +0100)
Don't parse IA_NA/IA_PD options if either na_mode or pd_mode is set
to IA_MODE_NONE

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
src/dhcpv6.c

index 857cbe1ce1b52c408d4ce22befc829c00e3b7b09..5378010310d1ae35b29fd7ef1b5c9b0f0a5115f8 100644 (file)
@@ -862,7 +862,8 @@ static int dhcpv6_handle_advert(enum dhcpv6_msg orig, const int rc,
 
        dhcpv6_for_each_option(opt, end, otype, olen, odata) {
                if (orig == DHCPV6_MSG_SOLICIT &&
-                               (otype == DHCPV6_OPT_IA_PD || otype == DHCPV6_OPT_IA_NA) &&
+                               ((otype == DHCPV6_OPT_IA_PD && pd_mode != IA_MODE_NONE) ||
+                                (otype == DHCPV6_OPT_IA_NA && na_mode != IA_MODE_NONE)) &&
                                olen > -4 + sizeof(struct dhcpv6_ia_hdr)) {
                        struct dhcpv6_ia_hdr *ia_hdr = (void*)(&odata[-4]);
                        dhcpv6_parse_ia(ia_hdr, odata + olen + sizeof(*ia_hdr));