summaryrefslogtreecommitdiffstats
path: root/lib/bucket_locks.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2021-09-13 14:42:33 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2021-09-21 03:46:55 +0200
commita499b03bf36b0c2e3b958a381d828678ab0ffc5e (patch)
tree8cafe425042022c6be918922292743f9b42cacd1 /lib/bucket_locks.c
parentcb89f63ba662d2b56583f4dd3dd2b7f03b6d6587 (diff)
downloadlinux-a499b03bf36b0c2e3b958a381d828678ab0ffc5e.tar.bz2
netfilter: nf_tables: unlink table before deleting it
syzbot reports following UAF: BUG: KASAN: use-after-free in memcmp+0x18f/0x1c0 lib/string.c:955 nla_strcmp+0xf2/0x130 lib/nlattr.c:836 nft_table_lookup.part.0+0x1a2/0x460 net/netfilter/nf_tables_api.c:570 nft_table_lookup net/netfilter/nf_tables_api.c:4064 [inline] nf_tables_getset+0x1b3/0x860 net/netfilter/nf_tables_api.c:4064 nfnetlink_rcv_msg+0x659/0x13f0 net/netfilter/nfnetlink.c:285 netlink_rcv_skb+0x153/0x420 net/netlink/af_netlink.c:2504 Problem is that all get operations are lockless, so the commit_mutex held by nft_rcv_nl_event() isn't enough to stop a parallel GET request from doing read-accesses to the table object even after synchronize_rcu(). To avoid this, unlink the table first and store the table objects in on-stack scratch space. Fixes: 6001a930ce03 ("netfilter: nftables: introduce table ownership") Reported-and-tested-by: syzbot+f31660cf279b0557160c@syzkaller.appspotmail.com Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'lib/bucket_locks.c')
0 files changed, 0 insertions, 0 deletions