summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby Eshleman <bobbyeshleman@meta.com>2026-01-22 01:11:42 +0300
committerPaolo Abeni <pabeni@redhat.com>2026-01-27 12:45:38 +0300
commita6ae12a599e0f16bc01a38bcfe8d0278a26b5ee0 (patch)
treea6ebce6dbfb213b4c5c5585d17cdbbe36033cb76
parenteafb64f40ca49c79f0769aab25d0fae5c9d3becb (diff)
downloadlinux-a6ae12a599e0f16bc01a38bcfe8d0278a26b5ee0.tar.xz
virtio: set skb owner of virtio_transport_reset_no_sock() reply
Associate reply packets with the sending socket. When vsock must reply with an RST packet and there exists a sending socket (e.g., for loopback), setting the skb owner to the socket correctly handles reference counting between the skb and sk (i.e., the sk stays alive until the skb is freed). This allows the net namespace to be used for socket lookups for the duration of the reply skb's lifetime, preventing race conditions between the namespace lifecycle and vsock socket search using the namespace pointer. Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com> Link: https://patch.msgid.link/20260121-vsock-vmtest-v16-2-2859a7512097@meta.com Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-rw-r--r--net/vmw_vsock/virtio_transport_common.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index d57e7af6a68d..72b5959d677c 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1177,6 +1177,12 @@ static int virtio_transport_reset_no_sock(const struct virtio_transport *t,
.op = VIRTIO_VSOCK_OP_RST,
.type = le16_to_cpu(hdr->type),
.reply = true,
+
+ /* Set sk owner to socket we are replying to (may be NULL for
+ * non-loopback). This keeps a reference to the sock and
+ * sock_net(sk) until the reply skb is freed.
+ */
+ .vsk = vsock_sk(skb->sk),
};
struct sk_buff *reply;