Subject: CVE-2021-46952: NFS: fs_context: validate UDP retrans to prevent shift out-of-bounds

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

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

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

NFS: fs_context: validate UDP retrans to prevent shift out-of-bounds

Fix shift out-of-bounds in xprt_calc_majortimeo(). This is caused
by a garbage timeout (retrans) mount option being passed to nfs mount,
in this case from syzkaller.

If the protocol is XPRT_TRANSPORT_UDP, then 'retrans' is a shift
value for a 64-bit long integer, so 'retrans' cannot be >= 64.
If it is >= 64, fail the mount and return an error.

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

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

	Issue introduced in 5.6 with commit 9954bf92c0cd and fixed in 5.10.36 with commit 96fa26b74cdc
	Issue introduced in 5.6 with commit 9954bf92c0cd and fixed in 5.11.20 with commit 2f3380121d49
	Issue introduced in 5.6 with commit 9954bf92c0cd and fixed in 5.12.3 with commit 3d0163821c03
	Issue introduced in 5.6 with commit 9954bf92c0cd and fixed in 5.13 with commit c09f11ef3595

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-46952
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:
	fs/nfs/fs_context.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/96fa26b74cdcf9f5c98996bf36bec9fb5b19ffe2
	https://git.kernel.org/stable/c/2f3380121d49e829fb73ba86240c181bc32ad897
	https://git.kernel.org/stable/c/3d0163821c035040a46d816a42c0780f0f0a30a8
	https://git.kernel.org/stable/c/c09f11ef35955785f92369e25819bf0629df2e59