diff options
author | Patrick McHardy <kaber@trash.net> | 2009-12-15 10:59:59 -0500 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2009-12-15 10:59:59 -0500 |
commit | 8fa9ff6849bb86c59cc2ea9faadf3cb2d5223497 (patch) | |
tree | 42c1cc382a9cfbb2907ab1471418404f874d53f2 /include/net | |
parent | 0b5ccb2ee250136dd7385b1c7da28417d0d4d32d (diff) |
netfilter: fix crashes in bridge netfilter caused by fragment jumps
When fragments from bridge netfilter are passed to IPv4 or IPv6 conntrack
and a reassembly queue with the same fragment key already exists from
reassembling a similar packet received on a different device (f.i. with
multicasted fragments), the reassembled packet might continue on a different
codepath than where the head fragment originated. This can cause crashes
in bridge netfilter when a fragment received on a non-bridge device (and
thus with skb->nf_bridge == NULL) continues through the bridge netfilter
code.
Add a new reassembly identifier for packets originating from bridge
netfilter and use it to put those packets in insolated queues.
Fixes http://bugzilla.kernel.org/show_bug.cgi?id=14805
Reported-and-Tested-by: Chong Qiao <qiaochong@loongson.cn>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/ip.h | 1 | ||||
-rw-r--r-- | include/net/ipv6.h | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/include/net/ip.h b/include/net/ip.h index e6b9d12d5f62..85108cfbb1ae 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
@@ -337,6 +337,7 @@ enum ip_defrag_users { | |||
337 | IP_DEFRAG_CALL_RA_CHAIN, | 337 | IP_DEFRAG_CALL_RA_CHAIN, |
338 | IP_DEFRAG_CONNTRACK_IN, | 338 | IP_DEFRAG_CONNTRACK_IN, |
339 | IP_DEFRAG_CONNTRACK_OUT, | 339 | IP_DEFRAG_CONNTRACK_OUT, |
340 | IP_DEFRAG_CONNTRACK_BRIDGE_IN, | ||
340 | IP_DEFRAG_VS_IN, | 341 | IP_DEFRAG_VS_IN, |
341 | IP_DEFRAG_VS_OUT, | 342 | IP_DEFRAG_VS_OUT, |
342 | IP_DEFRAG_VS_FWD | 343 | IP_DEFRAG_VS_FWD |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index d6916035bcea..ccab5946c830 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -354,6 +354,7 @@ enum ip6_defrag_users { | |||
354 | IP6_DEFRAG_LOCAL_DELIVER, | 354 | IP6_DEFRAG_LOCAL_DELIVER, |
355 | IP6_DEFRAG_CONNTRACK_IN, | 355 | IP6_DEFRAG_CONNTRACK_IN, |
356 | IP6_DEFRAG_CONNTRACK_OUT, | 356 | IP6_DEFRAG_CONNTRACK_OUT, |
357 | IP6_DEFRAG_CONNTRACK_BRIDGE_IN, | ||
357 | }; | 358 | }; |
358 | 359 | ||
359 | struct ip6_create_arg { | 360 | struct ip6_create_arg { |