Thread (4 messages) 4 messages, 3 authors, 2023-06-05

Re: [PATCH net] virtio/vsock: fix sock refcnt bug on owner set failure

From: Bobby Eshleman <hidden>
Date: 2023-06-01 23:40:01
Also in: kvm, lkml

On Thu, Jun 01, 2023 at 09:58:47AM +0200, Stefano Garzarella wrote:
On Wed, May 31, 2023 at 07:47:32PM +0000, Bobby Eshleman wrote:
quoted
Previous to setting the owner the socket is found via
vsock_find_connected_socket(), which returns sk after a call to
sock_hold().

If setting the owner fails, then sock_put() needs to be called.

Fixes: f9d2b1e146e0 ("virtio/vsock: fix leaks due to missing skb owner")
Signed-off-by: Bobby Eshleman <redacted>
---
net/vmw_vsock/virtio_transport_common.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index b769fc258931..f01cd6adc5cb 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1343,6 +1343,7 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
	if (!skb_set_owner_sk_safe(skb, sk)) {
		WARN_ONCE(1, "receiving vsock socket has sk_refcnt == 0\n");
+		sock_put(sk);
Did you have any warning, issue here?

IIUC skb_set_owner_sk_safe() can return false only if the ref counter
is 0, so calling a sock_put() on it should have no effect except to
produce a warning.
Oh yeah, you're totally right. I did not recall how
skb_set_owner_sk_safe() worked internally and thought I'd introduced an
uneven hold/put count with that prior patch when reading through the
code again. I haven't seen any live issue, just misread the code.

Sorry about that, feel free to ignore this patch.

Best,
Bobby
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help