mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
netfilter: use nf_ip6_check_hbh_len in nf_ct_skb_network_trim
For IPv6 Jumbo packets, the ipv6_hdr(skb)->payload_len is always 0, and its real payload_len ( > 65535) is saved in hbh exthdr. With 0 length for the jumbo packets, all data and exthdr will be trimmed in nf_ct_skb_network_trim(). This patch is to call nf_ip6_check_hbh_len() to get real pkt_len of the IPv6 packet, similar to br_validate_ipv6(). Signed-off-by: Xin Long <lucien.xin@gmail.com> Reviewed-by: Simon Horman <simon.horman@corigine.com> Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org> Reviewed-by: Aaron Conole <aconole@redhat.com> Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
parent
28e144cf5f
commit
eaafdaa3e9
@ -6,6 +6,7 @@
|
||||
#include <net/netfilter/ipv6/nf_defrag_ipv6.h>
|
||||
#include <net/ipv6_frag.h>
|
||||
#include <net/ip.h>
|
||||
#include <linux/netfilter_ipv6.h>
|
||||
|
||||
/* 'skb' should already be pulled to nh_ofs. */
|
||||
int nf_ct_helper(struct sk_buff *skb, struct nf_conn *ct,
|
||||
@ -120,8 +121,14 @@ int nf_ct_skb_network_trim(struct sk_buff *skb, int family)
|
||||
len = skb_ip_totlen(skb);
|
||||
break;
|
||||
case NFPROTO_IPV6:
|
||||
len = sizeof(struct ipv6hdr)
|
||||
+ ntohs(ipv6_hdr(skb)->payload_len);
|
||||
len = ntohs(ipv6_hdr(skb)->payload_len);
|
||||
if (ipv6_hdr(skb)->nexthdr == NEXTHDR_HOP) {
|
||||
int err = nf_ip6_check_hbh_len(skb, &len);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
len += sizeof(struct ipv6hdr);
|
||||
break;
|
||||
default:
|
||||
len = skb->len;
|
||||
|
Loading…
Reference in New Issue
Block a user