aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/netfilter/nft_hash.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/netfilter/nft_hash.c b/net/netfilter/nft_hash.c
index 6fa016564f90..d3a507d3f192 100644
--- a/net/netfilter/nft_hash.c
+++ b/net/netfilter/nft_hash.c
@@ -153,9 +153,10 @@ static void *nft_hash_deactivate(const struct nft_set *set,
153 const struct nft_set_elem *elem) 153 const struct nft_set_elem *elem)
154{ 154{
155 struct nft_hash *priv = nft_set_priv(set); 155 struct nft_hash *priv = nft_set_priv(set);
156 struct net *net = read_pnet(&set->pnet);
156 struct nft_hash_elem *he; 157 struct nft_hash_elem *he;
157 struct nft_hash_cmp_arg arg = { 158 struct nft_hash_cmp_arg arg = {
158 .genmask = nft_genmask_next(read_pnet(&set->pnet)), 159 .genmask = nft_genmask_next(net),
159 .set = set, 160 .set = set,
160 .key = elem->key.val.data, 161 .key = elem->key.val.data,
161 }; 162 };
@@ -163,7 +164,8 @@ static void *nft_hash_deactivate(const struct nft_set *set,
163 rcu_read_lock(); 164 rcu_read_lock();
164 he = rhashtable_lookup_fast(&priv->ht, &arg, nft_hash_params); 165 he = rhashtable_lookup_fast(&priv->ht, &arg, nft_hash_params);
165 if (he != NULL) { 166 if (he != NULL) {
166 if (!nft_set_elem_mark_busy(&he->ext)) 167 if (!nft_set_elem_mark_busy(&he->ext) ||
168 !nft_is_active(net, &he->ext))
167 nft_set_elem_change_active(set, &he->ext); 169 nft_set_elem_change_active(set, &he->ext);
168 else 170 else
169 he = NULL; 171 he = NULL;