Subject: CVE-2021-46992: netfilter: nftables: avoid overflows in nft_hash_buckets()

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

netfilter: nftables: avoid overflows in nft_hash_buckets()

Number of buckets being stored in 32bit variables, we have to
ensure that no overflows occur in nft_hash_buckets()

syzbot injected a size == 0x40000000 and reported:

UBSAN: shift-out-of-bounds in ./include/linux/log2.h:57:13
shift exponent 64 is too large for 64-bit type 'long unsigned int'
CPU: 1 PID: 29539 Comm: syz-executor.4 Not tainted 5.12.0-rc7-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
 __dump_stack lib/dump_stack.c:79 [inline]
 dump_stack+0x141/0x1d7 lib/dump_stack.c:120
 ubsan_epilogue+0xb/0x5a lib/ubsan.c:148
 __ubsan_handle_shift_out_of_bounds.cold+0xb1/0x181 lib/ubsan.c:327
 __roundup_pow_of_two include/linux/log2.h:57 [inline]
 nft_hash_buckets net/netfilter/nft_set_hash.c:411 [inline]
 nft_hash_estimate.cold+0x19/0x1e net/netfilter/nft_set_hash.c:652
 nft_select_set_ops net/netfilter/nf_tables_api.c:3586 [inline]
 nf_tables_newset+0xe62/0x3110 net/netfilter/nf_tables_api.c:4322
 nfnetlink_rcv_batch+0xa09/0x24b0 net/netfilter/nfnetlink.c:488
 nfnetlink_rcv_skb_batch net/netfilter/nfnetlink.c:612 [inline]
 nfnetlink_rcv+0x3af/0x420 net/netfilter/nfnetlink.c:630
 netlink_unicast_kernel net/netlink/af_netlink.c:1312 [inline]
 netlink_unicast+0x533/0x7d0 net/netlink/af_netlink.c:1338
 netlink_sendmsg+0x856/0xd90 net/netlink/af_netlink.c:1927
 sock_sendmsg_nosec net/socket.c:654 [inline]
 sock_sendmsg+0xcf/0x120 net/socket.c:674
 ____sys_sendmsg+0x6e8/0x810 net/socket.c:2350
 ___sys_sendmsg+0xf3/0x170 net/socket.c:2404
 __sys_sendmsg+0xe5/0x1b0 net/socket.c:2433
 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46

The Linux kernel CVE team has assigned CVE-2021-46992 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 4.9 with commit 0ed6389c483d and fixed in 4.14.233 with commit 2824cafc6a93
	Issue introduced in 4.9 with commit 0ed6389c483d and fixed in 4.19.191 with commit efcd730ddd6f
	Issue introduced in 4.9 with commit 0ed6389c483d and fixed in 5.4.120 with commit c77e2ef18167
	Issue introduced in 4.9 with commit 0ed6389c483d and fixed in 5.10.38 with commit 72b49dd116ca
	Issue introduced in 4.9 with commit 0ed6389c483d and fixed in 5.11.22 with commit 1e8ab479cfbe
	Issue introduced in 4.9 with commit 0ed6389c483d and fixed in 5.12.5 with commit a388d10961ff
	Issue introduced in 4.9 with commit 0ed6389c483d and fixed in 5.13 with commit a54754ec9891

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2021-46992
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	net/netfilter/nft_set_hash.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/2824cafc6a93792d9ad85939c499161214d84c4b
	https://git.kernel.org/stable/c/efcd730ddd6f25578bd31bfe703e593e2421d708
	https://git.kernel.org/stable/c/c77e2ef18167ad334e27610ced9a7f6af5ec1787
	https://git.kernel.org/stable/c/72b49dd116ca00a46a11d5a4d8d7987f05ed9cd7
	https://git.kernel.org/stable/c/1e8ab479cfbe5751efccedb95afb9b112a5ba475
	https://git.kernel.org/stable/c/a388d10961ff8578b1a6691945d406c0f33aa71b
	https://git.kernel.org/stable/c/a54754ec9891830ba548e2010c889e3c8146e449