Skip to content

Commit 70c261d

Browse files
committed
netfilter: nf_tables_ipv6: consider network offset in netdev/egress validation
From netdev/egress, skb->len can include the ethernet header, therefore, subtract network offset from skb->len when validating IPv6 packet length. Fixes: 42df6e1 ("netfilter: Introduce egress hook") Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
1 parent 5fd0628 commit 70c261d

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

include/net/netfilter/nf_tables_ipv6.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ static inline int __nft_set_pktinfo_ipv6_validate(struct nft_pktinfo *pkt)
3131
struct ipv6hdr *ip6h, _ip6h;
3232
unsigned int thoff = 0;
3333
unsigned short frag_off;
34+
u32 pkt_len, skb_len;
3435
int protohdr;
35-
u32 pkt_len;
3636

3737
ip6h = skb_header_pointer(pkt->skb, skb_network_offset(pkt->skb),
3838
sizeof(*ip6h), &_ip6h);
@@ -43,7 +43,8 @@ static inline int __nft_set_pktinfo_ipv6_validate(struct nft_pktinfo *pkt)
4343
return -1;
4444

4545
pkt_len = ntohs(ip6h->payload_len);
46-
if (pkt_len + sizeof(*ip6h) > pkt->skb->len)
46+
skb_len = pkt->skb->len - skb_network_offset(pkt->skb);
47+
if (pkt_len + sizeof(*ip6h) > skb_len)
4748
return -1;
4849

4950
protohdr = ipv6_find_hdr(pkt->skb, &thoff, -1, &frag_off, &flags);

0 commit comments

Comments
 (0)