[PATCH nf-next v4 12/13] netfilter: ipset: use plain rcu_read_lock
Florian Westphal <[email protected]>
| Newsgroups | gmane.comp.security.firewalls.netfilter.devel |
|---|---|
| Message-ID | <[email protected]> |
No need to disable/reenable softirqs. Assisted-by: Claude:claude-sonnet-4-6 Signed-off-by: Florian Westphal <[email protected]> --- net/netfilter/ipset/ip_set_core.c | 4 ++-- net/netfilter/ipset/ip_set_hash_gen.h | 19 ++++++++----------- net/netfilter/ipset/ip_set_hash_netnet.c | 8 ++++---- net/netfilter/ipset/ip_set_hash_netportnet.c | 8 ++++---- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c index 632e30c7f35d..856e53271b38 100644 --- a/net/netfilter/ipset/ip_set_core.c +++ b/net/netfilter/ipset/ip_set_core.c @@ -1868,9 +1868,9 @@ static int ip_set_utest(struct sk_buff *skb, const struct nfnl_info *info, set->type->adt_policy, NULL)) return -IPSET_ERR_PROTOCOL; - rcu_read_lock_bh(); + rcu_read_lock(); ret = set->variant->uadt(set, tb, IPSET_TEST, &lineno, 0, 0); - rcu_read_unlock_bh(); + rcu_read_unlock(); /* Userspace can't trigger element to be re-added */ if (ret == -EAGAIN) ret = 1; diff --git a/net/netfilter/ipset/ip_set_hash_gen.h b/net/netfilter/ipset/ip_set_hash_gen.h index 225f30e5b749..cf48b7c50ca1 100644 --- a/net/netfilter/ipset/ip_set_hash_gen.h +++ b/net/netfilter/ipset/ip_set_hash_gen.h @@ -17,9 +17,6 @@ #define ipset_dereference_nfnl(p) \ rcu_dereference_protected(p, \ lockdep_nfnl_is_held(NFNL_SUBSYS_IPSET)) -#define ipset_dereference_bh_nfnl(p) \ - rcu_dereference_bh_check(p, \ - lockdep_nfnl_is_held(NFNL_SUBSYS_IPSET)) /* Kept for backward compatibility */ #define AHASH_INIT_SIZE 2 @@ -729,7 +726,7 @@ mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, int i; #endif - rcu_read_lock_bh(); + rcu_read_lock(); #ifdef IP_SET_HASH_WITH_MULTI { struct rhlist_head *tmp, *list; @@ -906,7 +903,7 @@ mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, ret = flag_exist ? 0 : -IPSET_ERR_EXIST; out_rcu_unlock: - rcu_read_unlock_bh(); + rcu_read_unlock(); return ret; } @@ -920,7 +917,7 @@ mtype_del(struct ip_set *set, void *value, const struct ip_set_ext *ext, struct mtype_rht_elem *e; int ret = -IPSET_ERR_EXIST; - rcu_read_lock_bh(); + rcu_read_lock(); #ifdef IP_SET_HASH_WITH_MULTI { struct rhlist_head *tmp, *list; @@ -954,7 +951,7 @@ mtype_del(struct ip_set *set, void *value, const struct ip_set_ext *ext, ip_set_ext_destroy(set, &e->elem); kfree_rcu(e, rcu); out_unlock: - rcu_read_unlock_bh(); + rcu_read_unlock(); return ret ? -IPSET_ERR_EXIST : 0; } @@ -994,10 +991,10 @@ mtype_test_cidrs(struct ip_set *set, struct mtype_elem *d, pr_debug("test by nets\n"); retry: multi = 0; - nets0 = ipset_dereference_bh_nfnl(h->rnets[0]); + nets0 = rcu_dereference(h->rnets[0]); seq0 = read_seqcount_begin(&nets0->seq); #if IPSET_NET_COUNT == 2 - nets1 = ipset_dereference_bh_nfnl(h->rnets[1]); + nets1 = rcu_dereference(h->rnets[1]); seq1 = read_seqcount_begin(&nets1->seq); #endif for (j = 0; j < nets0->len && !multi; j++) { @@ -1076,7 +1073,7 @@ mtype_test(struct ip_set *set, void *value, const struct ip_set_ext *ext, int i; #endif - rcu_read_lock_bh(); + rcu_read_lock(); #ifdef IP_SET_HASH_WITH_NETS /* If we test an IP address and not a network address, * try all possible network sizes @@ -1114,7 +1111,7 @@ mtype_test(struct ip_set *set, void *value, const struct ip_set_ext *ext, ret = mtype_data_match(&e->elem, ext, mext, set, flags); #endif out: - rcu_read_unlock_bh(); + rcu_read_unlock(); return ret; } diff --git a/net/netfilter/ipset/ip_set_hash_netnet.c b/net/netfilter/ipset/ip_set_hash_netnet.c index a6bd24e3b1ac..6b768725e4cd 100644 --- a/net/netfilter/ipset/ip_set_hash_netnet.c +++ b/net/netfilter/ipset/ip_set_hash_netnet.c @@ -148,10 +148,10 @@ hash_netnet4_kadt(struct ip_set *set, const struct sk_buff *skb, struct hash_netnet4_elem e = { }; struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set); - rcu_read_lock_bh(); + rcu_read_lock(); e.cidr[0] = INIT_CIDR(h->rnets[0], HOST_MASK); e.cidr[1] = INIT_CIDR(h->rnets[1], HOST_MASK); - rcu_read_unlock_bh(); + rcu_read_unlock(); if (adt == IPSET_TEST) e.ccmp = (HOST_MASK << (sizeof(e.cidr[0]) * 8)) | HOST_MASK; @@ -382,10 +382,10 @@ hash_netnet6_kadt(struct ip_set *set, const struct sk_buff *skb, struct hash_netnet6_elem e = { }; struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set); - rcu_read_lock_bh(); + rcu_read_lock(); e.cidr[0] = INIT_CIDR(h->rnets[0], HOST_MASK); e.cidr[1] = INIT_CIDR(h->rnets[1], HOST_MASK); - rcu_read_unlock_bh(); + rcu_read_unlock(); if (adt == IPSET_TEST) e.ccmp = (HOST_MASK << (sizeof(u8) * 8)) | HOST_MASK; diff --git a/net/netfilter/ipset/ip_set_hash_netportnet.c b/net/netfilter/ipset/ip_set_hash_netportnet.c index 8575a2c5e215..d1e4ce2f2afa 100644 --- a/net/netfilter/ipset/ip_set_hash_netportnet.c +++ b/net/netfilter/ipset/ip_set_hash_netportnet.c @@ -155,10 +155,10 @@ hash_netportnet4_kadt(struct ip_set *set, const struct sk_buff *skb, struct hash_netportnet4_elem e = { }; struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set); - rcu_read_lock_bh(); + rcu_read_lock(); e.cidr[0] = INIT_CIDR(h->rnets[0], HOST_MASK); e.cidr[1] = INIT_CIDR(h->rnets[1], HOST_MASK); - rcu_read_unlock_bh(); + rcu_read_unlock(); if (adt == IPSET_TEST) e.ccmp = (HOST_MASK << (sizeof(e.cidr[0]) * 8)) | HOST_MASK; @@ -444,10 +444,10 @@ hash_netportnet6_kadt(struct ip_set *set, const struct sk_buff *skb, struct hash_netportnet6_elem e = { }; struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set); - rcu_read_lock_bh(); + rcu_read_lock(); e.cidr[0] = INIT_CIDR(h->rnets[0], HOST_MASK); e.cidr[1] = INIT_CIDR(h->rnets[1], HOST_MASK); - rcu_read_unlock_bh(); + rcu_read_unlock(); if (adt == IPSET_TEST) e.ccmp = (HOST_MASK << (sizeof(u8) * 8)) | HOST_MASK; -- 2.55.0