From ed86984ac366d68a162e4169ce1824191ec8cf26 Mon Sep 17 00:00:00 2001 From: Jozsef Kadlecsik Date: Tue, 5 May 2015 16:48:50 +0200 Subject: netfilter: ipset: Correct rcu_dereference_bh_nfnl() usage When rcu_dereference_bh_nfnl() macro would be defined on the target system if will accept pointer and subsystem id. Check if rcu_dereference_bh_nfnl() is defined and make it accepting two arguments. Ported from a patch proposed by Sergey Popovich . Suggested-by: Sergey Popovich Signed-off-by: Jozsef Kadlecsik --- kernel/net/netfilter/ipset/ip_set_hash_gen.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'kernel') diff --git a/kernel/net/netfilter/ipset/ip_set_hash_gen.h b/kernel/net/netfilter/ipset/ip_set_hash_gen.h index 878d35f..4094065 100644 --- a/kernel/net/netfilter/ipset/ip_set_hash_gen.h +++ b/kernel/net/netfilter/ipset/ip_set_hash_gen.h @@ -17,7 +17,9 @@ #define ipset_dereference_protected(p, set) \ __ipset_dereference_protected(p, spin_is_locked(&(set)->lock)) -#define rcu_dereference_bh_nfnl(p) rcu_dereference_bh_check(p, 1) +#ifndef rcu_dereference_bh_nfnl +#define rcu_dereference_bh_nfnl(p, ss) rcu_dereference_bh_check(p, 1) +#endif /* Hashing which uses arrays to resolve clashing. The hash table is resized * (doubled) when searching becomes too long. @@ -570,7 +572,7 @@ mtype_resize(struct ip_set *set, bool retried) return -ENOMEM; #endif rcu_read_lock_bh(); - orig = rcu_dereference_bh_nfnl(h->table); + orig = rcu_dereference_bh_nfnl(h->table, NFNL_SUBSYS_IPSET); htable_bits = orig->htable_bits; rcu_read_unlock_bh(); @@ -1046,7 +1048,7 @@ mtype_head(struct ip_set *set, struct sk_buff *skb) u8 htable_bits; rcu_read_lock_bh(); - t = rcu_dereference_bh_nfnl(h->table); + t = rcu_dereference_bh_nfnl(h->table, NFNL_SUBSYS_IPSET); memsize = mtype_ahash_memsize(h, t, NLEN(set->family), set->dsize); htable_bits = t->htable_bits; rcu_read_unlock_bh(); @@ -1088,7 +1090,7 @@ mtype_uref(struct ip_set *set, struct netlink_callback *cb, bool start) if (start) { rcu_read_lock_bh(); - t = rcu_dereference_bh_nfnl(h->table); + t = rcu_dereference_bh_nfnl(h->table, NFNL_SUBSYS_IPSET); atomic_inc(&t->uref); cb->args[IPSET_CB_PRIVATE] = (unsigned long)t; rcu_read_unlock_bh(); -- cgit v1.2.3