Skip to content

Commit ffbf16a

Browse files
committed
vsock: backport SIOCINQ support
Backport SIOCINQ support for vsock, and extend TSI to support ioctls on top of vsock sockets. Fixes: containers/libkrun#657 Signed-off-by: Sergio Lopez <slp@redhat.com>
1 parent e0647fa commit ffbf16a

33 files changed

Lines changed: 123 additions & 62 deletions

File tree

patches/0001-krunfw-Don-t-panic-when-init-dies.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From db20a79e5810bc9fc77655acde5c8e13e7942ba9 Mon Sep 17 00:00:00 2001
22
From: Sergio Lopez <slp@redhat.com>
33
Date: Thu, 2 Mar 2023 07:34:49 +0100
4-
Subject: [PATCH 01/32] krunfw: Don't panic when init dies
4+
Subject: [PATCH 01/33] krunfw: Don't panic when init dies
55

66
In libkrun, the isolated process runs as PID 1. When it exits,
77
trigger an orderly reboot instead of panic'ing.

patches/0002-krunfw-Ignore-run_cmd-on-orderly-reboot.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From 2e7df3e03121c97e16bb72de31e8b5ba9908971a Mon Sep 17 00:00:00 2001
22
From: Sergio Lopez <slp@redhat.com>
33
Date: Mon, 16 May 2022 16:04:27 +0200
4-
Subject: [PATCH 02/32] krunfw: Ignore run_cmd on orderly reboot
4+
Subject: [PATCH 02/33] krunfw: Ignore run_cmd on orderly reboot
55

66
We don't really support restarting the conventional way, so ignore
77
"run_cmd" so we can fall back to an emergency sync and reboot.

patches/0003-vsock-dgram-generalize-recvmsg-and-drop-transport-dg.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From 8ca8db16da5001752ca7d782a60d9af85e7899b7 Mon Sep 17 00:00:00 2001
22
From: Bobby Eshleman <bobby.eshleman () bytedance ! com>
33
Date: Sat, 10 Jun 2023 00:58:28 +0000
4-
Subject: [PATCH 03/32] vsock/dgram: generalize recvmsg and drop
4+
Subject: [PATCH 03/33] vsock/dgram: generalize recvmsg and drop
55
transport->dgram_dequeue
66

77
This commit drops the transport->dgram_dequeue callback and makes

patches/0004-vsock-refactor-transport-lookup-code.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From 0530d4f1e7c9112d492330d74bab3426ef4f5cf6 Mon Sep 17 00:00:00 2001
22
From: Bobby Eshleman <bobby.eshleman () bytedance ! com>
33
Date: Sat, 10 Jun 2023 00:58:29 +0000
4-
Subject: [PATCH 04/32] vsock: refactor transport lookup code
4+
Subject: [PATCH 04/33] vsock: refactor transport lookup code
55

66
Introduce new reusable function vsock_connectible_lookup_transport()
77
that performs the transport lookup logic.

patches/0005-vsock-support-multi-transport-datagrams.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From 365643863f3166d827024d4b6067222a6453d015 Mon Sep 17 00:00:00 2001
22
From: Bobby Eshleman <bobby.eshleman () bytedance ! com>
33
Date: Sat, 10 Jun 2023 00:58:30 +0000
4-
Subject: [PATCH 05/32] vsock: support multi-transport datagrams
4+
Subject: [PATCH 05/33] vsock: support multi-transport datagrams
55

66
This patch adds support for multi-transport datagrams.
77

patches/0006-vsock-make-vsock-bind-reusable.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From cc6d6e946fdfd0e5aa2e1a9a1c6f4ecc199c2181 Mon Sep 17 00:00:00 2001
22
From: Bobby Eshleman <bobby.eshleman () bytedance ! com>
33
Date: Sat, 10 Jun 2023 00:58:31 +0000
4-
Subject: [PATCH 06/32] vsock: make vsock bind reusable
4+
Subject: [PATCH 06/33] vsock: make vsock bind reusable
55

66
This commit makes the bind table management functions in vsock usable
77
for different bind tables. For use by datagrams in a future patch.

patches/0007-virtio-vsock-add-VIRTIO_VSOCK_F_DGRAM-feature-bit.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From 33ddfd0056365235338e46e289657fc1c1355bc2 Mon Sep 17 00:00:00 2001
22
From: Bobby Eshleman <bobby.eshleman () bytedance ! com>
33
Date: Sat, 10 Jun 2023 00:58:32 +0000
4-
Subject: [PATCH 07/32] virtio/vsock: add VIRTIO_VSOCK_F_DGRAM feature bit
4+
Subject: [PATCH 07/33] virtio/vsock: add VIRTIO_VSOCK_F_DGRAM feature bit
55

66
This commit adds a feature bit for virtio vsock to support datagrams.
77

patches/0008-virtio-vsock-support-dgrams.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
From 2883434bdf71f2441c1d34788fb138c010533254 Mon Sep 17 00:00:00 2001
22
From: Bobby Eshleman <bobby.eshleman () bytedance ! com>
33
Date: Sat, 10 Jun 2023 00:58:33 +0000
4-
Subject: [PATCH 08/32] virtio/vsock: support dgrams
4+
Subject: [PATCH 08/33] virtio/vsock: support dgrams
55

66
This commit adds support for datagrams over virtio/vsock.
77

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
From 43fbbbc07f1ababcbfb305548aacdb5711dacf80 Mon Sep 17 00:00:00 2001
2+
From: Xuewei Niu <niuxuewei.nxw@antgroup.com>
3+
Date: Tue, 8 Jul 2025 14:36:12 +0800
4+
Subject: [PATCH 09/33] vsock: Add support for SIOCINQ ioctl
5+
6+
Add support for SIOCINQ ioctl, indicating the length of bytes unread in the
7+
socket. The value is obtained from `vsock_stream_has_data()`.
8+
9+
Signed-off-by: Xuewei Niu <niuxuewei.nxw@antgroup.com>
10+
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
11+
Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
12+
Link: https://patch.msgid.link/20250708-siocinq-v6-2-3775f9a9e359@antgroup.com
13+
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
14+
(cherry picked from commit f7c72265927540fb24c99fee8a54da7db537656c)
15+
Signed-off-by: Sergio Lopez <slp@redhat.com>
16+
---
17+
net/vmw_vsock/af_vsock.c | 22 ++++++++++++++++++++++
18+
1 file changed, 22 insertions(+)
19+
20+
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
21+
index e949c9892c2c..23700ee6d732 100644
22+
--- a/net/vmw_vsock/af_vsock.c
23+
+++ b/net/vmw_vsock/af_vsock.c
24+
@@ -1545,6 +1545,28 @@ static int vsock_do_ioctl(struct socket *sock, unsigned int cmd,
25+
vsk = vsock_sk(sk);
26+
27+
switch (cmd) {
28+
+ case SIOCINQ: {
29+
+ ssize_t n_bytes;
30+
+
31+
+ if (!vsk->transport) {
32+
+ ret = -EOPNOTSUPP;
33+
+ break;
34+
+ }
35+
+
36+
+ if (sock_type_connectible(sk->sk_type) &&
37+
+ sk->sk_state == TCP_LISTEN) {
38+
+ ret = -EINVAL;
39+
+ break;
40+
+ }
41+
+
42+
+ n_bytes = vsock_stream_has_data(vsk);
43+
+ if (n_bytes < 0) {
44+
+ ret = n_bytes;
45+
+ break;
46+
+ }
47+
+ ret = put_user(n_bytes, arg);
48+
+ break;
49+
+ }
50+
case SIOCOUTQ: {
51+
ssize_t n_bytes;
52+
53+
--
54+
2.54.0
55+

patches/0009-Transparent-Socket-Impersonation-implementation.patch renamed to patches/0010-Transparent-Socket-Impersonation-implementation.patch

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
From 2afce693dedb3bc54648665488d346bbc17ab73a Mon Sep 17 00:00:00 2001
1+
From ded9cc7856982681ac78e57bd0bd56989536ee3b Mon Sep 17 00:00:00 2001
22
From: Sergio Lopez <slp@redhat.com>
33
Date: Thu, 19 May 2022 22:38:26 +0200
4-
Subject: [PATCH 09/32] Transparent Socket Impersonation implementation
4+
Subject: [PATCH 10/33] Transparent Socket Impersonation implementation
55

66
Transparent Socket Impersonation (AF_TSI) is an address family that
77
provides sockets presenting two simultaneous personalities, one of
@@ -31,11 +31,11 @@ Signed-off-by: Matej Hrica <mhrica@redhat.com>
3131
net/socket.c | 3 +
3232
net/tsi/Kconfig | 7 +
3333
net/tsi/Makefile | 4 +
34-
net/tsi/af_tsi.c | 1571 +++++++++++++++++++++++++++
34+
net/tsi/af_tsi.c | 1577 +++++++++++++++++++++++++++
3535
net/tsi/af_tsi.h | 107 ++
3636
security/selinux/hooks.c | 8 +-
3737
security/selinux/include/classmap.h | 3 +-
38-
10 files changed, 1710 insertions(+), 3 deletions(-)
38+
10 files changed, 1716 insertions(+), 3 deletions(-)
3939
create mode 100644 net/tsi/Kconfig
4040
create mode 100644 net/tsi/Makefile
4141
create mode 100644 net/tsi/af_tsi.c
@@ -128,10 +128,10 @@ index 000000000000..8b3cf74116a5
128128
+tsi-y := af_tsi.o
129129
diff --git a/net/tsi/af_tsi.c b/net/tsi/af_tsi.c
130130
new file mode 100644
131-
index 000000000000..e266f968405b
131+
index 000000000000..3d2bcd8d2ba4
132132
--- /dev/null
133133
+++ b/net/tsi/af_tsi.c
134-
@@ -0,0 +1,1571 @@
134+
@@ -0,0 +1,1577 @@
135135
+/* SPDX-License-Identifier: GPL-2.0-only */
136136
+/*
137137
+ * Transparent Socket Impersonation Driver
@@ -908,11 +908,13 @@ index 000000000000..e266f968405b
908908
+ struct sock *sk = sock->sk;
909909
+ struct tsi_sock *tsk;
910910
+ struct socket *isocket;
911+
+ struct socket *vsocket;
911912
+ int err;
912913
+
913914
+ lock_sock(sk);
914915
+ tsk = tsi_sk(sock->sk);
915916
+ isocket = tsk->isocket;
917+
+ vsocket = tsk->vsocket;
916918
+
917919
+ switch (tsk->status) {
918920
+ case S_HYBRID:
@@ -924,7 +926,11 @@ index 000000000000..e266f968405b
924926
+ }
925927
+ break;
926928
+ case S_VSOCK:
927-
+ err = -EOPNOTSUPP;
929+
+ if (vsocket) {
930+
+ err = vsocket->ops->ioctl(vsocket, cmd, arg);
931+
+ } else {
932+
+ err = -EOPNOTSUPP;
933+
+ }
928934
+ break;
929935
+ }
930936
+

0 commit comments

Comments
 (0)