summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorArseniy Krasnov <avkrasnov@sberdevices.ru>2023-03-28 14:32:12 +0300
committerPaolo Abeni <pabeni@redhat.com>2023-03-30 10:47:48 +0200
commitb8d2f61fdf2a566f7872158f35e65599aceb90fb (patch)
tree2933e84f77e16b64a8d77c0bdc8b76d7cc05eff6 /net
parentf7154d967bc4ee25ea1572937550e711b2525474 (diff)
virtio/vsock: WARN_ONCE() for invalid state of socket
This adds WARN_ONCE() and return from stream dequeue callback when socket's queue is empty, but 'rx_bytes' still non-zero. This allows the detection of potential bugs due to packet merging (see previous patch). Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'net')
-rw-r--r--net/vmw_vsock/virtio_transport_common.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index 11ca9b3362aa..37934dfe72f4 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -363,6 +363,13 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk,
u32 free_space;
spin_lock_bh(&vvs->rx_lock);
+
+ if (WARN_ONCE(skb_queue_empty(&vvs->rx_queue) && vvs->rx_bytes,
+ "rx_queue is empty, but rx_bytes is non-zero\n")) {
+ spin_unlock_bh(&vvs->rx_lock);
+ return err;
+ }
+
while (total < len && !skb_queue_empty(&vvs->rx_queue)) {
skb = skb_peek(&vvs->rx_queue);