]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfilter: nft_exthdr: check for IPv6 packet before further processing
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 10 Jun 2021 18:20:30 +0000 (20:20 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jul 2021 14:22:35 +0000 (16:22 +0200)
[ Upstream commit cdd73cc545c0fb9b1a1f7b209f4f536e7990cff4 ]

ipv6_find_hdr() does not validate that this is an IPv6 packet. Add a
sanity check for calling ipv6_find_hdr() to make sure an IPv6 packet
is passed for parsing.

Fixes: 96518518cc41 ("netfilter: add nftables")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/netfilter/nft_exthdr.c

index ba7aed13e1749442d3add6fde2e6b377fd1ad39d..a81f6bf42d1fded6f8de3dd4bd70c74cd456cfdb 100644 (file)
@@ -34,6 +34,9 @@ static void nft_exthdr_eval(const struct nft_expr *expr,
        unsigned int offset = 0;
        int err;
 
+       if (pkt->skb->protocol != htons(ETH_P_IPV6))
+               goto err;
+
        err = ipv6_find_hdr(pkt->skb, &offset, priv->type, NULL, NULL);
        if (err < 0)
                goto err;