netfilter: nf_conntrack_ipv6: Plug sk_buff leak in fragment handling
Subsystems (2)
PATCH 1/1 netfilter: nf_conntrack_ipv6: Plug sk_buff leak in fragment handling
In commit 4cdd3408 ("netfilter: nf_conntrack_ipv6: improve fragmentation handling"), an sk_buff leak was introduced when dealing with reassembled packets by grabbing a reference to the original skb instead of the reassembled skb. At this point, the leak only impacted conntracks with an associated helper.
In commit 58a317f1 ("netfilter: ipv6: add IPv6 NAT support"), the bug was expanded to include all reassembled packets with unconfirmed conntracks.
Fix this by grabbing a reference to the proper reassembled skb. This closes netfilter bugzilla #823.
Phil
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +1 -1
@@ -204,7 +204,7 @@ static unsigned int __ipv6_conntrack_in(struct net *net,if (ct !=NULL && !nf_ct_is_untracked (ct)) { help =nfct_help (ct);if ((help && help->helper) || !nf_ct_is_confirmed (ct)) { -nf_conntrack_get_reasm (skb); +nf_conntrack_get_reasm (reasm); NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm, (struct net_device *)in, (struct net_device *)out,
Florian Westphal
maintainerQuoted 5 lines · Phil Oester
In commit
4cdd3408("netfilter:nf_conntrack_ipv6: improve fragmentation handling"), ansk_buffleak was introduced when dealing with reassembled packets by grabbing a reference to the original skb instead of the reassembled skb. At this point, the leak only impacted conntracks with an associated helper.
David, could you please apply this patch directly in case Pablo doesn't apply it first? This fixes a remote DoS, so it better hit -stable ASAP.
Thanks.
[ archive link: http://patchwork.ozlabs.org/patch/252692/ ]
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c static unsigned int __ipv6_conntrack_in(struct net *net, · line 210
Quoted 13 lines
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +1
-1@@ -204,7 +204,7 @@ static unsigned int __ipv6_conntrack_in(struct net *net,if (ct !=NULL && !nf_ct_is_untracked (ct)) { help =nfct_help (ct);if ((help && help->helper) || !nf_ct_is_confirmed (ct)) { -nf_conntrack_get_reasm (skb); +nf_conntrack_get_reasm (reasm); NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm, (struct net_device *)in, (struct net_device *)out,
Thanks for fixing it, but personally I would have preferred a short early warning period.
Pablo Neira Ayuso
maintainerQuoted 9 lines · Florian Westphal
Quoted 5 lines · Phil Oester
In commit
4cdd3408("netfilter:nf_conntrack_ipv6: improve fragmentation handling"), ansk_buffleak was introduced when dealing with reassembled packets by grabbing a reference to the original skb instead of the reassembled skb. At this point, the leak only impacted conntracks with an associated helper.David, could you please apply this patch directly in case Pablo doesn't apply it first? This fixes a remote DoS, so it better hit -stable ASAP.
I'll take care of it.