FAILED: patch "[PATCH] vsock/virtio: discard packets if the transport changes" failed to apply to 5.15-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 2cb7c756f605ec02ffe562fb26828e4bcc5fdfc1
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025012004-rise-cavity-58aa@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2cb7c756f605ec02ffe562fb26828e4bcc5fdfc1 Mon Sep 17 00:00:00 2001
From: Stefano Garzarella <[email protected]>
Date: Fri, 10 Jan 2025 09:35:07 +0100
Subject: [PATCH] vsock/virtio: discard packets if the transport changes
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.
net/vmw_vsock/virtio_transport_common.c +5 -2
@@ -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);
Stefano Garzarella
maintainerQuoted 2 lines · On Mon, Jan 20, 2025 at 02:40:04PM +0100, [email protected] wrote:
The patch below does not apply to the 5.15-stable tree.
There is a "context" conflict due to the fact that we do not have the following patch in the 5.15-stable tree:
71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with sk_buff")
Since backporting that patch is too risky for me, I will send a version of this patch following the instructions below.
Thanks,
Stefano
Quoted 65 lines
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkoutFETCH_HEAD
git cherry-pick -x2cb7c756f605ec02ffe562fb26828e4bcc5fdfc1
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025012004-rise-cavity-58aa@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
2cb7c756f605ec02ffe562fb26828e4bcc5fdfc1Mon Sep 17 00:00:00 2001
From: Stefano Garzarella <[email protected]>
Date: Fri, 10 Jan 2025 09:35:07 +0100
Subject: [PATCH] vsock/virtio: discard packets if the transport changesIf 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 secondconnect()failed, we can findvsk->transportat NULL, leading to a NULL pointer dereference.Fixes c0cfa2d8a788 ("vsock: add multi-transports support")Reported-by Hyunwoo Kim <[email protected]>Reported-by Wongi Lee <[email protected]>Signed-off-by Stefano Garzarella <[email protected]>Reviewed-by Hyunwoo Kim <[email protected]>Signed-off-by Paolo Abeni <[email protected]>net/vmw_vsock/virtio_transport_common.c +5
-2@@ -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);
Stefano Garzarella
maintainerPATCH 1/1 vsock/virtio: discard packets if the transport changes
In reply to [email protected]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.
[SG: fixed context conflict since this tree is missing commit 71dc9ec9ac7d
("virtio/vsock: replace virtio_vsock_pkt with sk_buff")]
--- net/vmw_vsock/virtio_transport_common.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
net/vmw_vsock/virtio_transport_common.c +5 -2
@@ -1304,8 +1304,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, pkt);release_sock (sk);sock_put (sk);
Signature · 1 line
2.48.1
Re: [PATCH 5.15.y] vsock/virtio: discard packets if the transport changes
[ Sasha's backport helper bot ]
Hi,
Found matching upstream commit: 2cb7c756f605ec02ffe562fb26828e4bcc5fdfc1
Status in newer kernel trees:
6.12.y | Not found
6.6.y | Not found
6.1.y | Not found
5.15.y | Not found
Note: The patch differs from the upstream commit:
---
1: 2cb7c756f605e ! 1: 95bc6e4a9a892 vsock/virtio: discard packets if the transport changes
@@ Commit message
+ (cherry picked from commit 2cb7c756f605ec02ffe562fb26828e4bcc5fdfc1)
+ [SG: fixed context conflict since this tree is missing commit 71dc9ec9ac7d
+ ("virtio/vsock: replace virtio_vsock_pkt with sk_buff")]
+ Signed-off-by: Stefano Garzarella <[email protected]>
## net/vmw_vsock/virtio_transport_common.c ##
@@ net/vmw_vsock/virtio_transport_common.c: void virtio_transport_recv_pkt(struct virtio_transport *t,
@@ net/vmw_vsock/virtio_transport_common.c: void virtio_transport_recv_pkt(struct v
+ */
+ if (sock_flag(sk, SOCK_DONE) ||
+ (sk->sk_state != TCP_LISTEN && vsk->transport != &t->transport)) {
- (void)virtio_transport_reset_no_sock(t, skb);
+ (void)virtio_transport_reset_no_sock(t, pkt);
release_sock(sk);
sock_put(sk);
---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-5.15.y | Success | Success |