diff options
| -rw-r--r-- | net/netfilter/nft_hash.c | 6 |
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; |
