]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
net: bridge: fix vlan tunnel dst null pointer dereference
authorNikolay Aleksandrov <nikolay@nvidia.com>
Thu, 10 Jun 2021 12:04:10 +0000 (15:04 +0300)
committerSasha Levin <sashal@kernel.org>
Wed, 30 Jun 2021 12:48:25 +0000 (08:48 -0400)
commit24a6e55f17aa123bc1fc54b7d3c410b41bc16530
tree8af7b03ea323c8dbc32cf6715833a58fb5c072bb
parent534fb8a871c4fa3218303118c38b4e304f8a9fd6
net: bridge: fix vlan tunnel dst null pointer dereference

commit 58e2071742e38f29f051b709a5cca014ba51166f upstream.

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.

Cc: stable@vger.kernel.org
Fixes: 11538d039ac6 ("bridge: vlan dst_metadata hooks in ingress and egress paths")
Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/bridge/br_private.h
net/bridge/br_vlan_tunnel.c