Subject: CVE-2021-47223: net: bridge: fix vlan tunnel dst null pointer dereference

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

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

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

net: bridge: fix vlan tunnel dst null pointer dereference

This patch fixes a tunnel_dst null pointer dereference due to lockless
access in the tunnel egress path. When deleting a vlan tunnel the
tunnel_dst pointer is set to NULL without waiting a grace period (i.e.
while it's still usable) and packets egressing are dereferencing it
without checking. Use READ/WRITE_ONCE to annotate the lockless use of
tunnel_id, use RCU for accessing tunnel_dst and make sure it is read
only once and checked in the egress path. The dst is already properly RCU
protected so we don't need to do anything fancy than to make sure
tunnel_id and tunnel_dst are read only once and checked in the egress path.

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

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

	Issue introduced in 4.11 with commit 11538d039ac6 and fixed in 4.14.238 with commit ad7feefe7164
	Issue introduced in 4.11 with commit 11538d039ac6 and fixed in 4.19.196 with commit 24a6e55f17aa
	Issue introduced in 4.11 with commit 11538d039ac6 and fixed in 5.4.128 with commit a2241e62f6b4
	Issue introduced in 4.11 with commit 11538d039ac6 and fixed in 5.10.46 with commit fe0448a3fad3
	Issue introduced in 4.11 with commit 11538d039ac6 and fixed in 5.12.13 with commit abb02e05cb1c
	Issue introduced in 4.11 with commit 11538d039ac6 and fixed in 5.13 with commit 58e2071742e3

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-47223
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/bridge/br_private.h
	net/bridge/br_vlan_tunnel.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/ad7feefe7164892db424c45687472db803d87f79
	https://git.kernel.org/stable/c/24a6e55f17aa123bc1fc54b7d3c410b41bc16530
	https://git.kernel.org/stable/c/a2241e62f6b4a774d8a92048fdf59c45f6c2fe5c
	https://git.kernel.org/stable/c/fe0448a3fad365a747283a00a1d1ad5e8d6675b7
	https://git.kernel.org/stable/c/abb02e05cb1c0a30dd873a29f33bc092067dc35d
	https://git.kernel.org/stable/c/58e2071742e38f29f051b709a5cca014ba51166f