* [PATCH net-next v3 0/4] vsock: consolidate acceptq accounting into core helpers
@ 2026-06-12 4:52 Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 1/4] vsock: introduce vsock_pending_to_accept() helper Raf Dickson
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Raf Dickson @ 2026-06-12 4:52 UTC (permalink / raw)
To: netdev, virtualization
Cc: pabeni, sgarzare, stefanha, bryan-bt.tan, vishnu.dasa,
bcm-kernel-feedback-list, bobbyeshleman, leonardi, horms,
edumazet, kuba, Raf Dickson
These patches follow up on commit c05fa14db43e
("vsock/vmci: fix sk_ack_backlog leak on failed handshake")
by consolidating sk_acceptq_added() and sk_acceptq_removed() into
the core vsock helpers so transports cannot forget them.
Changes since v2:
- Add vsock_pending_to_accept() helper for the vmci pending->accept
transition, avoiding a double sk_acceptq_added() (Stefano Garzarella)
- Split into 4 patches for bisectability (Stefano Garzarella)
- Fold sk_acceptq_added() into vsock_add_pending() as a separate patch
Link: https://lore.kernel.org/netdev/20260611021317.69362-1-rafdog35@gmail.com/
Raf Dickson (4):
vsock: introduce vsock_pending_to_accept() helper
vsock: fold sk_acceptq_added() into vsock_add_pending()
vsock: fold sk_acceptq_added() into vsock_enqueue_accept()
vsock: fold sk_acceptq_removed() into vsock_remove_pending()
include/net/af_vsock.h | 1 +
net/vmw_vsock/af_vsock.c | 14 +++++++++++++-
net/vmw_vsock/hyperv_transport.c | 1 -
net/vmw_vsock/virtio_transport_common.c | 1 -
net/vmw_vsock/vmci_transport.c | 8 ++------
5 files changed, 16 insertions(+), 9 deletions(-)
--
2.54.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next v3 1/4] vsock: introduce vsock_pending_to_accept() helper
2026-06-12 4:52 [PATCH net-next v3 0/4] vsock: consolidate acceptq accounting into core helpers Raf Dickson
@ 2026-06-12 4:52 ` Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 2/4] vsock: fold sk_acceptq_added() into vsock_add_pending() Raf Dickson
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Raf Dickson @ 2026-06-12 4:52 UTC (permalink / raw)
To: netdev, virtualization
Cc: pabeni, sgarzare, stefanha, bryan-bt.tan, vishnu.dasa,
bcm-kernel-feedback-list, bobbyeshleman, leonardi, horms,
edumazet, kuba, Raf Dickson
Add vsock_pending_to_accept() to move a socket directly from the
pending list to the accept queue in a single operation, avoiding
the sock_put/sock_hold dance and the sk_acceptq_removed()/
sk_acceptq_added() pair that would otherwise be needed when
calling vsock_remove_pending() followed by vsock_enqueue_accept().
Use it in vmci_transport_recv_connecting_server() where a completed
handshake transitions the socket from pending to accept queue.
Suggested-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Raf Dickson <rafdog35@gmail.com>
---
include/net/af_vsock.h | 1 +
net/vmw_vsock/af_vsock.c | 10 ++++++++++
net/vmw_vsock/vmci_transport.c | 3 +--
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
index 4e40063ada..30046a3c20 100644
--- a/include/net/af_vsock.h
+++ b/include/net/af_vsock.h
@@ -220,6 +220,7 @@ static inline bool __vsock_in_connected_table(struct vsock_sock *vsk)
void vsock_add_pending(struct sock *listener, struct sock *pending);
void vsock_remove_pending(struct sock *listener, struct sock *pending);
void vsock_enqueue_accept(struct sock *listener, struct sock *connected);
+void vsock_pending_to_accept(struct sock *listener, struct sock *pending);
void vsock_insert_connected(struct vsock_sock *vsk);
void vsock_remove_bound(struct vsock_sock *vsk);
void vsock_remove_connected(struct vsock_sock *vsk);
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 2ce1063d4a..1f94f0d44c 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -496,6 +496,16 @@ void vsock_remove_pending(struct sock *listener, struct sock *pending)
}
EXPORT_SYMBOL_GPL(vsock_remove_pending);
+void vsock_pending_to_accept(struct sock *listener, struct sock *pending)
+{
+ struct vsock_sock *vpending = vsock_sk(pending);
+ struct vsock_sock *vlistener = vsock_sk(listener);
+
+ list_del_init(&vpending->pending_links);
+ list_add_tail(&vpending->accept_queue, &vlistener->accept_queue);
+}
+EXPORT_SYMBOL_GPL(vsock_pending_to_accept);
+
void vsock_enqueue_accept(struct sock *listener, struct sock *connected)
{
struct vsock_sock *vlistener;
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index 91516488a7..635ebf9da4 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -1258,8 +1258,7 @@ vmci_transport_recv_connecting_server(struct sock *listener,
* listener's pending list to the accept queue so callers of accept()
* can find it.
*/
- vsock_remove_pending(listener, pending);
- vsock_enqueue_accept(listener, pending);
+ vsock_pending_to_accept(listener, pending);
/* Callers of accept() will be waiting on the listening socket, not
* the pending socket.
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v3 2/4] vsock: fold sk_acceptq_added() into vsock_add_pending()
2026-06-12 4:52 [PATCH net-next v3 0/4] vsock: consolidate acceptq accounting into core helpers Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 1/4] vsock: introduce vsock_pending_to_accept() helper Raf Dickson
@ 2026-06-12 4:52 ` Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 3/4] vsock: fold sk_acceptq_added() into vsock_enqueue_accept() Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 4/4] vsock: fold sk_acceptq_removed() into vsock_remove_pending() Raf Dickson
3 siblings, 0 replies; 5+ messages in thread
From: Raf Dickson @ 2026-06-12 4:52 UTC (permalink / raw)
To: netdev, virtualization
Cc: pabeni, sgarzare, stefanha, bryan-bt.tan, vishnu.dasa,
bcm-kernel-feedback-list, bobbyeshleman, leonardi, horms,
edumazet, kuba, Raf Dickson
Move sk_acceptq_added() into vsock_add_pending() so callers cannot
forget it. vmci is the only transport using the pending list and
is updated accordingly.
Suggested-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Raf Dickson <rafdog35@gmail.com>
---
net/vmw_vsock/af_vsock.c | 1 +
net/vmw_vsock/vmci_transport.c | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 1f94f0d44c..6cfa89b6f3 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -483,6 +483,7 @@ void vsock_add_pending(struct sock *listener, struct sock *pending)
sock_hold(pending);
sock_hold(listener);
list_add_tail(&vpending->pending_links, &vlistener->pending_links);
+ sk_acceptq_added(listener);
}
EXPORT_SYMBOL_GPL(vsock_add_pending);
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index 635ebf9da4..c2db016cca 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -1109,7 +1109,6 @@ static int vmci_transport_recv_listen(struct sock *sk,
}
vsock_add_pending(sk, pending);
- sk_acceptq_added(sk);
pending->sk_state = TCP_SYN_SENT;
vmci_trans(vpending)->produce_size =
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v3 3/4] vsock: fold sk_acceptq_added() into vsock_enqueue_accept()
2026-06-12 4:52 [PATCH net-next v3 0/4] vsock: consolidate acceptq accounting into core helpers Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 1/4] vsock: introduce vsock_pending_to_accept() helper Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 2/4] vsock: fold sk_acceptq_added() into vsock_add_pending() Raf Dickson
@ 2026-06-12 4:52 ` Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 4/4] vsock: fold sk_acceptq_removed() into vsock_remove_pending() Raf Dickson
3 siblings, 0 replies; 5+ messages in thread
From: Raf Dickson @ 2026-06-12 4:52 UTC (permalink / raw)
To: netdev, virtualization
Cc: pabeni, sgarzare, stefanha, bryan-bt.tan, vishnu.dasa,
bcm-kernel-feedback-list, bobbyeshleman, leonardi, horms,
edumazet, kuba, Raf Dickson
virtio and hyperv call sk_acceptq_added() immediately before
vsock_enqueue_accept(). Move the call into vsock_enqueue_accept()
itself so callers cannot forget it and the accounting is consistent.
Suggested-by: Paolo Abeni <pabeni@redhat.com>
Suggested-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Raf Dickson <rafdog35@gmail.com>
---
net/vmw_vsock/af_vsock.c | 1 +
net/vmw_vsock/hyperv_transport.c | 1 -
net/vmw_vsock/virtio_transport_common.c | 1 -
3 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 6cfa89b6f3..24916dd4e9 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -518,6 +518,7 @@ void vsock_enqueue_accept(struct sock *listener, struct sock *connected)
sock_hold(connected);
sock_hold(listener);
list_add_tail(&vconnected->accept_queue, &vlistener->accept_queue);
+ sk_acceptq_added(listener);
}
EXPORT_SYMBOL_GPL(vsock_enqueue_accept);
diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
index b3394946b2..0de8148877 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -410,7 +410,6 @@ static void hvs_open_connection(struct vmbus_channel *chan)
if (conn_from_host) {
new->sk_state = TCP_ESTABLISHED;
- sk_acceptq_added(sk);
hvs_new->vm_srv_id = *if_type;
hvs_new->host_srv_id = *if_instance;
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index b10666937c..4a39d48db9 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1582,7 +1582,6 @@ virtio_transport_recv_listen(struct sock *sk, struct sk_buff *skb,
return ret;
}
- sk_acceptq_added(sk);
if (virtio_transport_space_update(child, skb))
child->sk_write_space(child);
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v3 4/4] vsock: fold sk_acceptq_removed() into vsock_remove_pending()
2026-06-12 4:52 [PATCH net-next v3 0/4] vsock: consolidate acceptq accounting into core helpers Raf Dickson
` (2 preceding siblings ...)
2026-06-12 4:52 ` [PATCH net-next v3 3/4] vsock: fold sk_acceptq_added() into vsock_enqueue_accept() Raf Dickson
@ 2026-06-12 4:52 ` Raf Dickson
3 siblings, 0 replies; 5+ messages in thread
From: Raf Dickson @ 2026-06-12 4:52 UTC (permalink / raw)
To: netdev, virtualization
Cc: pabeni, sgarzare, stefanha, bryan-bt.tan, vishnu.dasa,
bcm-kernel-feedback-list, bobbyeshleman, leonardi, horms,
edumazet, kuba, Raf Dickson
Callers of vsock_remove_pending() must also call sk_acceptq_removed()
to keep sk_ack_backlog consistent. Move the call into
vsock_remove_pending() itself to make it automatic and prevent future
callers from forgetting it.
Suggested-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Raf Dickson <rafdog35@gmail.com>
---
net/vmw_vsock/af_vsock.c | 2 +-
net/vmw_vsock/vmci_transport.c | 4 +---
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 24916dd4e9..4a7d6d247a 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -494,6 +494,7 @@ void vsock_remove_pending(struct sock *listener, struct sock *pending)
list_del_init(&vpending->pending_links);
sock_put(listener);
sock_put(pending);
+ sk_acceptq_removed(listener);
}
EXPORT_SYMBOL_GPL(vsock_remove_pending);
@@ -773,7 +774,6 @@ static void vsock_pending_work(struct work_struct *work)
if (vsock_is_pending(sk)) {
vsock_remove_pending(listener, sk);
- sk_acceptq_removed(listener);
} else if (!vsk->rejected) {
/* We are not on the pending list and accept() did not reject
* us, so we must have been accepted by our user process. We
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index c2db016cca..3e6445f4e1 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -980,10 +980,8 @@ static int vmci_transport_recv_listen(struct sock *sk,
err = -EINVAL;
}
- if (err < 0) {
+ if (err < 0)
vsock_remove_pending(sk, pending);
- sk_acceptq_removed(sk);
- }
release_sock(pending);
vmci_transport_release_pending(pending);
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-06-12 4:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-12 4:52 [PATCH net-next v3 0/4] vsock: consolidate acceptq accounting into core helpers Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 1/4] vsock: introduce vsock_pending_to_accept() helper Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 2/4] vsock: fold sk_acceptq_added() into vsock_add_pending() Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 3/4] vsock: fold sk_acceptq_added() into vsock_enqueue_accept() Raf Dickson
2026-06-12 4:52 ` [PATCH net-next v3 4/4] vsock: fold sk_acceptq_removed() into vsock_remove_pending() Raf Dickson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox