diff options
author | Patrick McHarrdy <kaber@trash.net> | 2007-06-05 12:55:27 -0700 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-06-07 13:40:26 -0700 |
commit | 3c158f7f57601bc27eab82f0dc4fd3fad314d845 (patch) | |
tree | 03c8f9d7fa1e51d852ff6b90c35030491613df03 /net/netfilter/nf_conntrack_helper.c | |
parent | 51055be81c3cb14d0165a7432b787098b817fd35 (diff) | |
download | kernel_samsung_smdk4412-3c158f7f57601bc27eab82f0dc4fd3fad314d845.zip kernel_samsung_smdk4412-3c158f7f57601bc27eab82f0dc4fd3fad314d845.tar.gz kernel_samsung_smdk4412-3c158f7f57601bc27eab82f0dc4fd3fad314d845.tar.bz2 |
[NETFILTER]: nf_conntrack: fix helper module unload races
When a helper module is unloaded all conntracks refering to it have their
helper pointer NULLed out, leading to lots of races. In most places this
can be fixed by proper use of RCU (they do already check for != NULL,
but in a racy way), additionally nf_conntrack_expect_related needs to
bail out when no helper is present.
Also remove two paranoid BUG_ONs in nf_conntrack_proto_gre that are racy
and not worth fixing.
Signed-off-by: Patrick McHarrdy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netfilter/nf_conntrack_helper.c')
-rw-r--r-- | net/netfilter/nf_conntrack_helper.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c index 0743be4..f868b7f 100644 --- a/net/netfilter/nf_conntrack_helper.c +++ b/net/netfilter/nf_conntrack_helper.c @@ -93,7 +93,7 @@ static inline int unhelp(struct nf_conntrack_tuple_hash *i, if (help && help->helper == me) { nf_conntrack_event(IPCT_HELPER, ct); - help->helper = NULL; + rcu_assign_pointer(help->helper, NULL); } return 0; } |