wireguard: device: avoid circular netns references
authorJason A. Donenfeld <Jason@zx2c4.com>
Tue, 23 Jun 2020 09:59:45 +0000 (03:59 -0600)
committerSasha Levin <sashal@kernel.org>
Tue, 30 Jun 2020 19:35:52 +0000 (15:35 -0400)
commit363cc6efdbb54bb06cd5034a69b41aae974a736f
treebbaa5628809a24821d0fe1d6737c33ce1ad2fa76
parent9291835df5c93a75a8ca75aa11cabf4f9accdb28
wireguard: device: avoid circular netns references

[ Upstream commit 900575aa33a3eaaef802b31de187a85c4a4b4bd0 ]

Before, we took a reference to the creating netns if the new netns was
different. This caused issues with circular references, with two
wireguard interfaces swapping namespaces. The solution is to rather not
take any extra references at all, but instead simply invalidate the
creating netns pointer when that netns is deleted.

In order to prevent this from happening again, this commit improves the
rough object leak tracking by allowing it to account for created and
destroyed interfaces, aside from just peers and keys. That then makes it
possible to check for the object leak when having two interfaces take a
reference to each others' namespaces.

Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/wireguard/device.c
drivers/net/wireguard/device.h
drivers/net/wireguard/netlink.c
drivers/net/wireguard/socket.c
tools/testing/selftests/wireguard/netns.sh