]> git.baikalelectronics.ru Git - kernel.git/commitdiff
netfilter: nf_tables: netlink notifier might race to release objects
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 26 Oct 2022 07:52:36 +0000 (09:52 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 1 Nov 2022 11:19:46 +0000 (12:19 +0100)
commit release path is invoked via call_rcu and it runs lockless to
release the objects after rcu grace period. The netlink notifier handler
might win race to remove objects that the transaction context is still
referencing from the commit release path.

Call rcu_barrier() to ensure pending rcu callbacks run to completion
if the list of transactions to be destroyed is not empty.

Fixes: 6001a930ce03 ("netfilter: nftables: introduce table ownership")
Reported-by: syzbot+8f747f62763bc6c32916@syzkaller.appspotmail.com
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_tables_api.c

index 58d9cbc9ccdc75d480659188cb09002fe7f55eeb..2197118aa7b09b93db2da10c17d142948d7a6f68 100644 (file)
@@ -10030,6 +10030,8 @@ static int nft_rcv_nl_event(struct notifier_block *this, unsigned long event,
        nft_net = nft_pernet(net);
        deleted = 0;
        mutex_lock(&nft_net->commit_mutex);
+       if (!list_empty(&nf_tables_destroy_list))
+               rcu_barrier();
 again:
        list_for_each_entry(table, &nft_net->tables, list) {
                if (nft_table_has_owner(table) &&