FAILED: patch "[PATCH] netfilter: nf_tables: do not allow SET_ID to refer to another" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 470ee20e069a6d05ae549f7d0ef2bdbcee6a81b2 Mon Sep 17 00:00:00 2001
From: Thadeu Lima de Souza Cascardo <[email protected]>
Date: Tue, 9 Aug 2022 14:01:46 -0300
Subject: [PATCH] netfilter: nf_tables: do not allow SET_ID to refer to another
table
When doing lookups for sets on the same batch by using its ID, a set from a different table can be used.
Then, when the table is removed, a reference to the set may be kept after the set is freed, leading to a potential use-after-free.
When looking for sets by ID, use the table that was used for the lookup by name, and only return sets belonging to that same table.
This fixes CVE-2022-2586, also reported as ZDI-CAN-17470.
net/netfilter/nf_tables_api.c +3 -1
@@ -3842,6 +3842,7 @@ static struct nft_set *nft_set_lookup_byhandle(const struct nft_table *table, }static struct nft_set *nft_set_lookup_byid (const struct net *net, +const struct nft_table *table,const struct nlattr *nla,u8 genmask) {struct nftables_pernet *nft_net =nft_pernet (net);
@@ -3853,6 +3854,7 @@ static struct nft_set *nft_set_lookup_byid(const struct net *net,struct nft_set *set =nft_trans_set (trans);if (id ==nft_trans_set_id (trans) && + set->table == table &&nft_active_genmask (set, genmask))return set; }
@@ -3873,7 +3875,7 @@ struct nft_set *nft_set_lookup_global(const struct net *net,if (!nla_set_id)return set; - set =nft_set_lookup_byid (net, nla_set_id, genmask); + set =nft_set_lookup_byid (net, table, nla_set_id, genmask); }return set; }