diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2024-03-14 16:49:10 -0600 |
---|---|---|
committer | Paolo Abeni <pabeni@redhat.com> | 2024-03-19 11:22:50 +0100 |
commit | 28e0c21e1ec879752388b0d552a1b0e938c2982c (patch) | |
tree | 730375e5a960f94bea535199a50139aeb5d49236 | |
parent | 57f7108e870f2ff3101d2458ea0a9f8f69fb0212 (diff) | |
download | wireguard-linux-trimmed-28e0c21e1ec879752388b0d552a1b0e938c2982c.tar.gz wireguard-linux-trimmed-28e0c21e1ec879752388b0d552a1b0e938c2982c.zip |
wireguard: netlink: access device through ctx instead of peer
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: a8f1bc7bdea3 ("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>
-rw-r--r-- | drivers/net/wireguard/netlink.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/wireguard/netlink.c b/drivers/net/wireguard/netlink.c index c17aee4..f705518 100644 --- a/drivers/net/wireguard/netlink.c +++ b/drivers/net/wireguard/netlink.c @@ -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); |