@@ -7223,6 +7223,16 @@ void nft_data_hold(const struct nft_data *data, enum nft_data_types type)
7223
7223
}
7224
7224
}
7225
7225
7226
+ static int nft_setelem_active_next (const struct net * net ,
7227
+ const struct nft_set * set ,
7228
+ struct nft_elem_priv * elem_priv )
7229
+ {
7230
+ const struct nft_set_ext * ext = nft_set_elem_ext (set , elem_priv );
7231
+ u8 genmask = nft_genmask_next (net );
7232
+
7233
+ return nft_set_elem_active (ext , genmask );
7234
+ }
7235
+
7226
7236
static void nft_setelem_data_activate (const struct net * net ,
7227
7237
const struct nft_set * set ,
7228
7238
struct nft_elem_priv * elem_priv )
@@ -10644,8 +10654,10 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action)
10644
10654
case NFT_MSG_DESTROYSETELEM :
10645
10655
te = (struct nft_trans_elem * )trans -> data ;
10646
10656
10647
- nft_setelem_data_activate (net , te -> set , te -> elem_priv );
10648
- nft_setelem_activate (net , te -> set , te -> elem_priv );
10657
+ if (!nft_setelem_active_next (net , te -> set , te -> elem_priv )) {
10658
+ nft_setelem_data_activate (net , te -> set , te -> elem_priv );
10659
+ nft_setelem_activate (net , te -> set , te -> elem_priv );
10660
+ }
10649
10661
if (!nft_setelem_is_catchall (te -> set , te -> elem_priv ))
10650
10662
te -> set -> ndeact -- ;
10651
10663
0 commit comments