Subject: CVE-2021-46974: bpf: Fix masking negation logic upon negative dst register

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

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

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

bpf: Fix masking negation logic upon negative dst register

The negation logic for the case where the off_reg is sitting in the
dst register is not correct given then we cannot just invert the add
to a sub or vice versa. As a fix, perform the final bitwise and-op
unconditionally into AX from the off_reg, then move the pointer from
the src to dst and finally use AX as the source for the original
pointer arithmetic operation such that the inversion yields a correct
result. The single non-AX mov in between is possible given constant
blinding is retaining it as it's not an immediate based operation.

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

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

	Issue introduced in 4.14.113 with commit ae03b6b1c880 and fixed in 4.14.233 with commit 4d542ddb88fb
	Issue introduced in 4.19.19 with commit f92a819b4cbe and fixed in 4.19.190 with commit 0e2dfdc74a7f
	Issue introduced in 5.0 with commit 979d63d50c0c and fixed in 5.4.117 with commit 53e0db429b37
	Issue introduced in 5.0 with commit 979d63d50c0c and fixed in 5.10.35 with commit 2cfa537674cd
	Issue introduced in 5.0 with commit 979d63d50c0c and fixed in 5.11.19 with commit 6eba92a4d4be
	Issue introduced in 5.0 with commit 979d63d50c0c and fixed in 5.12.2 with commit 7cf64d8679ca
	Issue introduced in 5.0 with commit 979d63d50c0c and fixed in 5.13 with commit b9b34ddbe207
	Issue introduced in 4.20.6 with commit 078da99d449f

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-46974
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:
	kernel/bpf/verifier.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/4d542ddb88fb2f39bf7f14caa2902f3e8d06f6ba
	https://git.kernel.org/stable/c/0e2dfdc74a7f4036127356d42ea59388f153f42c
	https://git.kernel.org/stable/c/53e0db429b37a32b8fc706d0d90eb4583ad13848
	https://git.kernel.org/stable/c/2cfa537674cd1051a3b8111536d77d0558f33d5d
	https://git.kernel.org/stable/c/6eba92a4d4be8feb4dc33976abac544fa99d6ecc
	https://git.kernel.org/stable/c/7cf64d8679ca1cb20cf57d6a88bfee79a0922a66
	https://git.kernel.org/stable/c/b9b34ddbe2076ade359cd5ce7537d5ed019e9807