[PATCH v1] VSOCK: fix Information Leak in virtio_transport_shutdown()

Subsystems: networking [general], the rest, virtio and vhost vsock driver, virtio core, vm sockets (af_vsock)

STALE425d

5 messages, 4 authors, 2025-08-05 · open the first message on its own page

[PATCH v1] VSOCK: fix Information Leak in virtio_transport_shutdown()

From: <hidden>
Date: 2025-08-05 05:10:22

From: Henry Martin <redacted>

The `struct virtio_vsock_pkt_info` is declared on the stack but only
partially initialized (only `op`, `flags`, and `vsk` are set)

The uninitialized fields (including `pkt_len`, `remote_cid`,
`remote_port`, etc.) contain residual kernel stack data. This structure
is passed to `virtio_transport_send_pkt_info()`, which uses the
uninitialized fields.

Fixes: 06a8fc78367d ("VSOCK: Introduce virtio_vsock_common.ko")
Reported-by: TCS Robot <redacted>
Signed-off-by: Henry Martin <redacted>
---
 net/vmw_vsock/virtio_transport_common.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index fe92e5fa95b4..cb391a98d025 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1073,14 +1073,14 @@ EXPORT_SYMBOL_GPL(virtio_transport_connect);
 
 int virtio_transport_shutdown(struct vsock_sock *vsk, int mode)
 {
-	struct virtio_vsock_pkt_info info = {
-		.op = VIRTIO_VSOCK_OP_SHUTDOWN,
-		.flags = (mode & RCV_SHUTDOWN ?
-			  VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
-			 (mode & SEND_SHUTDOWN ?
-			  VIRTIO_VSOCK_SHUTDOWN_SEND : 0),
-		.vsk = vsk,
-	};
+	struct virtio_vsock_pkt_info info = {0};
+
+	info.op = VIRTIO_VSOCK_OP_SHUTDOWN;
+	info.flags = (mode & RCV_SHUTDOWN ?
+			VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
+			(mode & SEND_SHUTDOWN ?
+			VIRTIO_VSOCK_SHUTDOWN_SEND : 0);
+	info.vsk = vsk;
 
 	return virtio_transport_send_pkt_info(vsk, &info);
 }
-- 
2.41.3

Re: [PATCH v1] VSOCK: fix Information Leak in virtio_transport_shutdown()

From: Wang Liang <hidden>
Date: 2025-08-05 06:55:40

在 2025/8/5 13:10, bsdhenrymartin@gmail.com 写道:
quoted hunk
From: Henry Martin <redacted>

The `struct virtio_vsock_pkt_info` is declared on the stack but only
partially initialized (only `op`, `flags`, and `vsk` are set)

The uninitialized fields (including `pkt_len`, `remote_cid`,
`remote_port`, etc.) contain residual kernel stack data. This structure
is passed to `virtio_transport_send_pkt_info()`, which uses the
uninitialized fields.

Fixes: 06a8fc78367d ("VSOCK: Introduce virtio_vsock_common.ko")
Reported-by: TCS Robot <redacted>
Signed-off-by: Henry Martin <redacted>
---
  net/vmw_vsock/virtio_transport_common.c | 15 +++++++--------
  1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index fe92e5fa95b4..cb391a98d025 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1073,14 +1073,14 @@ EXPORT_SYMBOL_GPL(virtio_transport_connect);
  
  int virtio_transport_shutdown(struct vsock_sock *vsk, int mode)
  {
-	struct virtio_vsock_pkt_info info = {
-		.op = VIRTIO_VSOCK_OP_SHUTDOWN,
-		.flags = (mode & RCV_SHUTDOWN ?
-			  VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
-			 (mode & SEND_SHUTDOWN ?
-			  VIRTIO_VSOCK_SHUTDOWN_SEND : 0),
-		.vsk = vsk,
-	};
+	struct virtio_vsock_pkt_info info = {0};
+
+	info.op = VIRTIO_VSOCK_OP_SHUTDOWN;
+	info.flags = (mode & RCV_SHUTDOWN ?
+			VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
+			(mode & SEND_SHUTDOWN ?
+			VIRTIO_VSOCK_SHUTDOWN_SEND : 0);
+	info.vsk = vsk;
  
  	return virtio_transport_send_pkt_info(vsk, &info);
  }

No. The unassigned members (including `pkt_len`, `remote_cid`,
`remote_port`, etc.) will be automatically initialized to 0?

Re: [PATCH v1] VSOCK: fix Information Leak in virtio_transport_shutdown()

From: Stefano Garzarella <sgarzare@redhat.com>
Date: 2025-08-05 07:01:02

On Tue, Aug 05, 2025 at 01:10:09PM +0800, bsdhenrymartin@gmail.com wrote:
quoted hunk
From: Henry Martin <redacted>

The `struct virtio_vsock_pkt_info` is declared on the stack but only
partially initialized (only `op`, `flags`, and `vsk` are set)

The uninitialized fields (including `pkt_len`, `remote_cid`,
`remote_port`, etc.) contain residual kernel stack data. This structure
is passed to `virtio_transport_send_pkt_info()`, which uses the
uninitialized fields.

Fixes: 06a8fc78367d ("VSOCK: Introduce virtio_vsock_common.ko")
Reported-by: TCS Robot <redacted>
Signed-off-by: Henry Martin <redacted>
---
net/vmw_vsock/virtio_transport_common.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index fe92e5fa95b4..cb391a98d025 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1073,14 +1073,14 @@ EXPORT_SYMBOL_GPL(virtio_transport_connect);
int virtio_transport_shutdown(struct vsock_sock *vsk, int mode)
{
-	struct virtio_vsock_pkt_info info = {
-		.op = VIRTIO_VSOCK_OP_SHUTDOWN,
-		.flags = (mode & RCV_SHUTDOWN ?
-			  VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
-			 (mode & SEND_SHUTDOWN ?
-			  VIRTIO_VSOCK_SHUTDOWN_SEND : 0),
-		.vsk = vsk,
-	};
The compiler sets all other fields to 0, so I don't understand what this patch solves.
Can you give an example of the problem you found?

Furthermore, even if this fix were valid, why do it for just one function?

Stefano
+	struct virtio_vsock_pkt_info info = {0};
+
+	info.op = VIRTIO_VSOCK_OP_SHUTDOWN;
+	info.flags = (mode & RCV_SHUTDOWN ?
+			VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
+			(mode & SEND_SHUTDOWN ?
+			VIRTIO_VSOCK_SHUTDOWN_SEND : 0);
+	info.vsk = vsk;

	return virtio_transport_send_pkt_info(vsk, &info);
}
-- 
2.41.3

Re: [PATCH] VSOCK: fix Information Leak in virtio_transport_shutdown()

From: Markus Elfring <hidden>
Date: 2025-08-05 08:08:31

The `struct virtio_vsock_pkt_info` is declared on the stack but only
partially initialized (only `op`, `flags`, and `vsk` are set)
…

See also once more:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.16#n94

Would a summary phrase like “Prevent information leak in virtio_transport_shutdown()”
be nicer?

Regards,
Markus

Re: [PATCH v1] VSOCK: fix Information Leak in virtio_transport_shutdown()

From: henry martin <hidden>
Date: 2025-08-05 08:53:16

Thanks for the quick review. You're right—this patch is a false
positive. Modern compilers zero out the remaining fields, so the fix
isn't needed.

I'll be withdrawing all the patches and will ensure we more carefully
evaluate our robot's findings before submitting in the future.

Thanks for your help!

Stefano Garzarella [off-list ref] 于2025年8月5日周二 15:01写道:
On Tue, Aug 05, 2025 at 01:10:09PM +0800, bsdhenrymartin@gmail.com wrote:
quoted
From: Henry Martin <redacted>

The `struct virtio_vsock_pkt_info` is declared on the stack but only
partially initialized (only `op`, `flags`, and `vsk` are set)

The uninitialized fields (including `pkt_len`, `remote_cid`,
`remote_port`, etc.) contain residual kernel stack data. This structure
is passed to `virtio_transport_send_pkt_info()`, which uses the
uninitialized fields.

Fixes: 06a8fc78367d ("VSOCK: Introduce virtio_vsock_common.ko")
Reported-by: TCS Robot <redacted>
Signed-off-by: Henry Martin <redacted>
---
net/vmw_vsock/virtio_transport_common.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index fe92e5fa95b4..cb391a98d025 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1073,14 +1073,14 @@ EXPORT_SYMBOL_GPL(virtio_transport_connect);
int virtio_transport_shutdown(struct vsock_sock *vsk, int mode)
{
-      struct virtio_vsock_pkt_info info = {
-              .op = VIRTIO_VSOCK_OP_SHUTDOWN,
-              .flags = (mode & RCV_SHUTDOWN ?
-                        VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
-                       (mode & SEND_SHUTDOWN ?
-                        VIRTIO_VSOCK_SHUTDOWN_SEND : 0),
-              .vsk = vsk,
-      };
The compiler sets all other fields to 0, so I don't understand what this
patch solves.
Can you give an example of the problem you found?

Furthermore, even if this fix were valid, why do it for just one
function?

Stefano
quoted
+      struct virtio_vsock_pkt_info info = {0};
+
+      info.op = VIRTIO_VSOCK_OP_SHUTDOWN;
+      info.flags = (mode & RCV_SHUTDOWN ?
+                      VIRTIO_VSOCK_SHUTDOWN_RCV : 0) |
+                      (mode & SEND_SHUTDOWN ?
+                      VIRTIO_VSOCK_SHUTDOWN_SEND : 0);
+      info.vsk = vsk;

      return virtio_transport_send_pkt_info(vsk, &info);
}
--
2.41.3
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help