diff options
author | Patrick McHardy <kaber@trash.net> | 2007-12-17 22:42:51 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 14:59:06 -0800 |
commit | 051578ccbcdad3b24b621dfb652194e36759e8d5 (patch) | |
tree | d0afda1f43bd1e6de4d38e9efa4c498723e7f206 /include/linux/netfilter.h | |
parent | 1e796fda00f06bac584f0e4ad8750ab9430d79d3 (diff) | |
download | linux-stable-051578ccbcdad3b24b621dfb652194e36759e8d5.tar.gz linux-stable-051578ccbcdad3b24b621dfb652194e36759e8d5.tar.bz2 linux-stable-051578ccbcdad3b24b621dfb652194e36759e8d5.zip |
[NETFILTER]: nf_nat: properly use RCU for ip_nat_decode_session
We need to use rcu_assign_pointer/rcu_dereference to avoid races.
Also remove an obsolete CONFIG_IP_NAT_NEEDED ifdef.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/netfilter.h')
-rw-r--r-- | include/linux/netfilter.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h index 0947424d01d6..1a8487325a4f 100644 --- a/include/linux/netfilter.h +++ b/include/linux/netfilter.h @@ -256,11 +256,16 @@ extern void (*ip_nat_decode_session)(struct sk_buff *, struct flowi *); static inline void nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, int family) { -#if defined(CONFIG_IP_NF_NAT_NEEDED) || defined(CONFIG_NF_NAT_NEEDED) +#ifdef CONFIG_NF_NAT_NEEDED void (*decodefn)(struct sk_buff *, struct flowi *); - if (family == AF_INET && (decodefn = ip_nat_decode_session) != NULL) - decodefn(skb, fl); + if (family == AF_INET) { + rcu_read_lock(); + decodefn = rcu_dereference(ip_nat_decode_session); + if (decodefn) + decodefn(skb, fl); + rcu_read_unlock(); + } #endif } |