All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Garzarella <sgarzare@redhat.com>
To: netdev@vger.kernel.org
Cc: "Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
	bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Luigi Leonardi" <leonardi@redhat.com>,
	"David S. Miller" <davem@davemloft.net>,
	"Wongi Lee" <qwerty@theori.io>,
	"Stefano Garzarella" <sgarzare@redhat.com>,
	"Eugenio Pérez" <eperezma@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Eric Dumazet" <edumazet@google.com>,
	kvm@vger.kernel.org, "Paolo Abeni" <pabeni@redhat.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Jason Wang" <jasowang@redhat.com>,
	"Simon Horman" <horms@kernel.org>,
	"Hyunwoo Kim" <v4bel@theori.io>,
	"Jakub Kicinski" <kuba@kernel.org>,
	"Michal Luczaj" <mhal@rbox.co>,
	virtualization@lists.linux.dev,
	"Bobby Eshleman" <bobby.eshleman@bytedance.com>,
	stable@vger.kernel.org
Subject: [PATCH net v2 1/5] vsock/virtio: discard packets if the transport changes
Date: Fri, 10 Jan 2025 09:35:07 +0100	[thread overview]
Message-ID: <20250110083511.30419-2-sgarzare@redhat.com> (raw)
In-Reply-To: <20250110083511.30419-1-sgarzare@redhat.com>

If the socket has been de-assigned or assigned to another transport,
we must discard any packets received because they are not expected
and would cause issues when we access vsk->transport.

A possible scenario is described by Hyunwoo Kim in the attached link,
where after a first connect() interrupted by a signal, and a second
connect() failed, we can find `vsk->transport` at NULL, leading to a
NULL pointer dereference.

Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
Cc: stable@vger.kernel.org
Reported-by: Hyunwoo Kim <v4bel@theori.io>
Reported-by: Wongi Lee <qwerty@theori.io>
Closes: https://lore.kernel.org/netdev/Z2LvdTTQR7dBmPb5@v4bel-B760M-AORUS-ELITE-AX/
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
 net/vmw_vsock/virtio_transport_common.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index 9acc13ab3f82..51a494b69be8 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1628,8 +1628,11 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
 
 	lock_sock(sk);
 
-	/* Check if sk has been closed before lock_sock */
-	if (sock_flag(sk, SOCK_DONE)) {
+	/* Check if sk has been closed or assigned to another transport before
+	 * lock_sock (note: listener sockets are not assigned to any transport)
+	 */
+	if (sock_flag(sk, SOCK_DONE) ||
+	    (sk->sk_state != TCP_LISTEN && vsk->transport != &t->transport)) {
 		(void)virtio_transport_reset_no_sock(t, skb);
 		release_sock(sk);
 		sock_put(sk);
-- 
2.47.1


  reply	other threads:[~2025-01-10  8:35 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-10  8:35 [PATCH net v2 0/5] vsock: some fixes due to transport de-assignment Stefano Garzarella
2025-01-10  8:35 ` Stefano Garzarella [this message]
2025-01-10 22:46   ` [PATCH net v2 1/5] vsock/virtio: discard packets if the transport changes Hyunwoo Kim
2025-01-12 22:42   ` Michal Luczaj
2025-01-13  8:57     ` Stefano Garzarella
2025-01-13  9:07       ` Stefano Garzarella
2025-01-13 10:12         ` Michal Luczaj
2025-01-13 11:05           ` Stefano Garzarella
2025-01-13 13:51             ` Michal Luczaj
2025-01-13 15:01               ` Stefano Garzarella
2025-01-14  0:09                 ` Michal Luczaj
2025-01-14 10:16                   ` Stefano Garzarella
2025-01-14 16:31                     ` Michal Luczaj
2025-01-16  8:57                       ` Stefano Garzarella
2025-01-17 22:02                         ` Michal Luczaj
2025-01-10  8:35 ` [PATCH net v2 2/5] vsock/bpf: return early if transport is not assigned Stefano Garzarella
2025-01-10  8:35 ` [PATCH net v2 3/5] vsock/virtio: cancel close work in the destructor Stefano Garzarella
2025-01-10 10:57   ` Luigi Leonardi
2025-01-10 22:48   ` Hyunwoo Kim
2025-01-10  8:35 ` [PATCH net v2 4/5] vsock: reset socket state when de-assigning the transport Stefano Garzarella
2025-01-10 10:56   ` Luigi Leonardi
2025-01-10 11:25     ` Stefano Garzarella
2025-01-10  8:35 ` [PATCH net v2 5/5] vsock: prevent null-ptr-deref in vsock_*[has_data|has_space] Stefano Garzarella
2025-01-10  9:49   ` Luigi Leonardi
2025-01-10 22:52   ` Hyunwoo Kim
2025-01-14 11:50 ` [PATCH net v2 0/5] vsock: some fixes due to transport de-assignment patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250110083511.30419-2-sgarzare@redhat.com \
    --to=sgarzare@redhat.com \
    --cc=bobby.eshleman@bytedance.com \
    --cc=bpf@vger.kernel.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=eperezma@redhat.com \
    --cc=horms@kernel.org \
    --cc=jasowang@redhat.com \
    --cc=kuba@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=leonardi@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhal@rbox.co \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=qwerty@theori.io \
    --cc=stable@vger.kernel.org \
    --cc=stefanha@redhat.com \
    --cc=v4bel@theori.io \
    --cc=virtualization@lists.linux.dev \
    --cc=xuanzhuo@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.