]> 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:21:02 +0000 (16:21 +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 47beb3abcc9daf46e084c0f189eaf7091d11241e..e2c815ee06d0e19251aefc0acff6112b290ed4c8 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;