|
@@ -2667,21 +2667,14 @@ static int nf_tables_newrule(struct net *net, struct sock *nlsk,
|
|
|
}
|
|
|
|
|
|
if (nlh->nlmsg_flags & NLM_F_REPLACE) {
|
|
|
- if (!nft_is_active_next(net, old_rule)) {
|
|
|
- err = -ENOENT;
|
|
|
- goto err2;
|
|
|
- }
|
|
|
- trans = nft_trans_rule_add(&ctx, NFT_MSG_DELRULE,
|
|
|
- old_rule);
|
|
|
+ trans = nft_trans_rule_add(&ctx, NFT_MSG_NEWRULE, rule);
|
|
|
if (trans == NULL) {
|
|
|
err = -ENOMEM;
|
|
|
goto err2;
|
|
|
}
|
|
|
- nft_deactivate_next(net, old_rule);
|
|
|
- chain->use--;
|
|
|
-
|
|
|
- if (nft_trans_rule_add(&ctx, NFT_MSG_NEWRULE, rule) == NULL) {
|
|
|
- err = -ENOMEM;
|
|
|
+ err = nft_delrule(&ctx, old_rule);
|
|
|
+ if (err < 0) {
|
|
|
+ nft_trans_destroy(trans);
|
|
|
goto err2;
|
|
|
}
|
|
|
|