diff options
author | Patrick McHardy <kaber@trash.net> | 2005-06-28 16:04:44 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-06-28 16:04:44 -0700 |
commit | 9666dae51013b064e7d77fc36b5cee98dd167ed5 (patch) | |
tree | beb8d20173ecdc5c60906c8fcac8346894673a4c /net/ipv4/ip_output.c | |
parent | bcd61272db5e643b6d9c01c9d5085b914d9f19df (diff) | |
download | op-kernel-dev-9666dae51013b064e7d77fc36b5cee98dd167ed5.zip op-kernel-dev-9666dae51013b064e7d77fc36b5cee98dd167ed5.tar.gz |
[NETFILTER]: Fix connection tracking bug in 2.6.12
In 2.6.12 we started dropping the conntrack reference when a packet
leaves the IP layer. This broke connection tracking on a bridge,
because bridge-netfilter defers calling some NF_IP_* hooks to the bridge
layer for locally generated packets going out a bridge, where the
conntrack reference is no longer available. This patch keeps the
reference in this case as a temporary solution, long term we will
remove the defered hook calling. No attempt is made to drop the
reference in the bridge-code when it is no longer needed, tc actions
could already have sent the packet anywhere.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_output.c')
-rw-r--r-- | net/ipv4/ip_output.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index ee07aec..6ce5c32 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -188,7 +188,13 @@ static inline int ip_finish_output2(struct sk_buff *skb) skb = skb2; } - nf_reset(skb); +#ifdef CONFIG_BRIDGE_NETFILTER + /* bridge-netfilter defers calling some IP hooks to the bridge layer + * and still needs the conntrack reference. + */ + if (skb->nf_bridge == NULL) +#endif + nf_reset(skb); if (hh) { int hh_alen; |