Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 6d6887a

Browse files
mstsirkinjiangxinpei
authored and
jiangxinpei
committed
UPSTREAM: vhost/vsock: always initialize seqpacket_allow
[ Upstream commit 1e1fdcb ] There are two issues around seqpacket_allow: 1. seqpacket_allow is not initialized when socket is created. Thus if features are never set, it will be read uninitialized. 2. if VIRTIO_VSOCK_F_SEQPACKET is set and then cleared, then seqpacket_allow will not be cleared appropriately (existing apps I know about don't usually do this but it's legal and there's no way to be sure no one relies on this). To fix: - initialize seqpacket_allow after allocation - set it unconditionally in set_features Bug: 373592534 Reported-by: syzbot+6c21aeb59d0e82eb2782@syzkaller.appspotmail.com Reported-by: Jeongjun Park <aha310510@gmail.com> Fixes: ced7b71 ("vhost/vsock: support SEQPACKET for transport"). Tested-by: Arseny Krasnov <arseny.krasnov@kaspersky.com> Cc: David S. Miller <davem@davemloft.net> Cc: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20240422100010-mutt-send-email-mst@kernel.org> Change-Id: Id21647a996099fc425713e202677d4ce8e754928 Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Reviewed-by: Eugenio Pérez <eperezma@redhat.com> Acked-by: Jakub Kicinski <kuba@kernel.org> (cherry picked from commit 30bd459)
1 parent 238462f commit 6d6887a

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/vhost/vsock.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,7 @@ static int vhost_vsock_dev_open(struct inode *inode, struct file *file)
656656
}
657657

658658
vsock->guest_cid = 0; /* no CID assigned yet */
659+
vsock->seqpacket_allow = false;
659660

660661
atomic_set(&vsock->queued_replies, 0);
661662

@@ -799,8 +800,7 @@ static int vhost_vsock_set_features(struct vhost_vsock *vsock, u64 features)
799800
goto err;
800801
}
801802

802-
if (features & (1ULL << VIRTIO_VSOCK_F_SEQPACKET))
803-
vsock->seqpacket_allow = true;
803+
vsock->seqpacket_allow = features & (1ULL << VIRTIO_VSOCK_F_SEQPACKET);
804804

805805
for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) {
806806
vq = &vsock->vqs[i];

0 commit comments

Comments
 (0)