Skip to content

Commit b0dd05c

Browse files
committed
netfilter: nf_tables: reject new basechain after table flag update
jira VULN-5134 cve CVE-2024-35900 commit-author Pablo Neira Ayuso <[email protected]> commit 994209d upstream-diff Fixed up a couple of small conflicts introduced by cherry picking from a very new source back into an ancient source. When dormant flag is toggled, hooks are disabled in the commit phase by iterating over current chains in table (existing and new). The following configuration allows for an inconsistent state: add table x add chain x y { type filter hook input priority 0; } add table x { flags dormant; } add chain x w { type filter hook input priority 1; } which triggers the following warning when trying to unregister chain w which is already unregistered. [ 127.322252] WARNING: CPU: 7 PID: 1211 at net/netfilter/core.c:50 1 __nf_unregister_net_hook+0x21a/0x260 [...] [ 127.322519] Call Trace: [ 127.322521] <TASK> [ 127.322524] ? __warn+0x9f/0x1a0 [ 127.322531] ? __nf_unregister_net_hook+0x21a/0x260 [ 127.322537] ? report_bug+0x1b1/0x1e0 [ 127.322545] ? handle_bug+0x3c/0x70 [ 127.322552] ? exc_invalid_op+0x17/0x40 [ 127.322556] ? asm_exc_invalid_op+0x1a/0x20 [ 127.322563] ? kasan_save_free_info+0x3b/0x60 [ 127.322570] ? __nf_unregister_net_hook+0x6a/0x260 [ 127.322577] ? __nf_unregister_net_hook+0x21a/0x260 [ 127.322583] ? __nf_unregister_net_hook+0x6a/0x260 [ 127.322590] ? __nf_tables_unregister_hook+0x8a/0xe0 [nf_tables] [ 127.322655] nft_table_disable+0x75/0xf0 [nf_tables] [ 127.322717] nf_tables_commit+0x2571/0x2620 [nf_tables] Fixes: 179d9ba ("netfilter: nf_tables: fix table flag updates") Signed-off-by: Pablo Neira Ayuso <[email protected]> (cherry picked from commit 994209d) Signed-off-by: Greg Rose <[email protected]> Conflicts: net/netfilter/nf_tables_api.c
1 parent 2ea486b commit b0dd05c

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

net/netfilter/nf_tables_api.c

+3
Original file line numberDiff line numberDiff line change
@@ -2040,6 +2040,9 @@ static int nf_tables_addchain(struct nft_ctx *ctx, u8 family, u8 genmask,
20402040
struct nft_stats __percpu *stats = NULL;
20412041
struct nft_chain_hook hook;
20422042

2043+
if (table->flags & __NFT_TABLE_F_UPDATE)
2044+
return -EINVAL;
2045+
20432046
err = nft_chain_parse_hook(net, nla, &hook, family, true);
20442047
if (err < 0)
20452048
return err;

0 commit comments

Comments
 (0)