]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
exthdr: prefer raw_type instead of desc->type
authorFlorian Westphal <fw@strlen.de>
Fri, 14 Jul 2023 14:53:57 +0000 (16:53 +0200)
committerFlorian Westphal <fw@strlen.de>
Mon, 17 Jul 2023 19:47:03 +0000 (21:47 +0200)
On ancient kernels desc can be NULL, because such kernels do not
understand NFTA_EXTHDR_TYPE.

Thus they don't include it in the reverse dump, so the tcp/ip
option gets treated like an ipv6 exthdr, but no matching
description will be found.

This then gives a crash due to the null deref.

Just use the raw value here, this avoid a crash and at least
print *something*, e.g.:

unknown-exthdr unknown & 0xf0 [invalid type] == 0x0 [invalid type]

Signed-off-by: Florian Westphal <fw@strlen.de>
src/exthdr.c

index f5527ddb4a3f333732b2ea8b62d0c46a2c6aa284..0358005b1b89440d8f13821a4ae43e39892bc658 100644 (file)
@@ -405,7 +405,7 @@ bool exthdr_find_template(struct expr *expr, const struct expr *mask, unsigned i
                found = tcpopt_find_template(expr, off, mask_len - mask_offset);
                break;
        case NFT_EXTHDR_OP_IPV6:
-               exthdr_init_raw(expr, expr->exthdr.desc->type,
+               exthdr_init_raw(expr, expr->exthdr.raw_type,
                                off, mask_len - mask_offset, expr->exthdr.op, 0);
 
                /* still failed to find a template... Bug. */