Skip to content
/ linux Public

Commit 01726b9

Browse files
Florian WestphalSasha Levin
authored andcommitted
netfilter: nf_tables: reset table validation state on abort
[ Upstream commit 6f93616 ] If a transaction fails the final validation in the commit hook, the table validation state is changed to NFT_VALIDATE_DO and a replay of the batch is performed. Every rule insert will then do a graph validation. This is much slower, but provides better error reporting to the user because we can point at the rule that introduces the validation issue. Without this reset the affected table(s) remain in full validation mode, i.e. on next transaction we start with slow-mode. This makes the next transaction after a failed incremental update very slow: # time iptables-restore < /tmp/ruleset real 0m0.496s [..] # time iptables -A CALLEE -j CALLER iptables v1.8.11 (nf_tables): RULE_APPEND failed (Too many links): rule in chain CALLEE real 0m0.022s [..] # time iptables-restore < /tmp/ruleset real 1m22.355s [..] After this patch, 2nd iptables-restore is back to ~0.5s. Fixes: 9a32e98 ("netfilter: nf_tables: don't write table validation state without mutex") Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent f6c4c7a commit 01726b9

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

net/netfilter/nf_tables_api.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11071,6 +11071,13 @@ static int nf_tables_abort(struct net *net, struct sk_buff *skb,
1107111071
ret = __nf_tables_abort(net, action);
1107211072
nft_gc_seq_end(nft_net, gc_seq);
1107311073

11074+
if (action == NFNL_ABORT_NONE) {
11075+
struct nft_table *table;
11076+
11077+
list_for_each_entry(table, &nft_net->tables, list)
11078+
table->validate_state = NFT_VALIDATE_SKIP;
11079+
}
11080+
1107411081
WARN_ON_ONCE(!list_empty(&nft_net->commit_list));
1107511082

1107611083
/* module autoload needs to happen after GC sequence update because it

0 commit comments

Comments
 (0)