]> git.itanic.dy.fi Git - linux-stable/commitdiff
wireguard: netlink: access device through ctx instead of peer
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 14 Mar 2024 22:49:10 +0000 (16:49 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Apr 2024 13:32:26 +0000 (15:32 +0200)
[ Upstream commit 71cbd32e3db82ea4a74e3ef9aeeaa6971969c86f ]

The previous commit fixed a bug that led to a NULL peer->device being
dereferenced. It's actually easier and faster performance-wise to
instead get the device from ctx->wg. This semantically makes more sense
too, since ctx->wg->peer_allowedips.seq is compared with
ctx->allowedips_seq, basing them both in ctx. This also acts as a
defence in depth provision against freed peers.

Cc: stable@vger.kernel.org
Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireguard/netlink.c

index c17aee454fa3b4ec9585126ccd7b8c0f3290622c..f7055180ba4aab5a0952357a334217e3cd6af078 100644 (file)
@@ -164,8 +164,8 @@ get_peer(struct wg_peer *peer, struct sk_buff *skb, struct dump_ctx *ctx)
        if (!allowedips_node)
                goto no_allowedips;
        if (!ctx->allowedips_seq)
-               ctx->allowedips_seq = peer->device->peer_allowedips.seq;
-       else if (ctx->allowedips_seq != peer->device->peer_allowedips.seq)
+               ctx->allowedips_seq = ctx->wg->peer_allowedips.seq;
+       else if (ctx->allowedips_seq != ctx->wg->peer_allowedips.seq)
                goto no_allowedips;
 
        allowedips_nest = nla_nest_start(skb, WGPEER_A_ALLOWEDIPS);