@@ -7219,6 +7219,16 @@ void nft_data_hold(const struct nft_data *data, enum nft_data_types type)
7219
7219
}
7220
7220
}
7221
7221
7222
+ static int nft_setelem_active_next (const struct net * net ,
7223
+ const struct nft_set * set ,
7224
+ struct nft_elem_priv * elem_priv )
7225
+ {
7226
+ const struct nft_set_ext * ext = nft_set_elem_ext (set , elem_priv );
7227
+ u8 genmask = nft_genmask_next (net );
7228
+
7229
+ return nft_set_elem_active (ext , genmask );
7230
+ }
7231
+
7222
7232
static void nft_setelem_data_activate (const struct net * net ,
7223
7233
const struct nft_set * set ,
7224
7234
struct nft_elem_priv * elem_priv )
@@ -10636,8 +10646,10 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action)
10636
10646
case NFT_MSG_DESTROYSETELEM :
10637
10647
te = (struct nft_trans_elem * )trans -> data ;
10638
10648
10639
- nft_setelem_data_activate (net , te -> set , te -> elem_priv );
10640
- nft_setelem_activate (net , te -> set , te -> elem_priv );
10649
+ if (!nft_setelem_active_next (net , te -> set , te -> elem_priv )) {
10650
+ nft_setelem_data_activate (net , te -> set , te -> elem_priv );
10651
+ nft_setelem_activate (net , te -> set , te -> elem_priv );
10652
+ }
10641
10653
if (!nft_setelem_is_catchall (te -> set , te -> elem_priv ))
10642
10654
te -> set -> ndeact -- ;
10643
10655
0 commit comments