]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
virtio-net: Ensure queue index fits with RSS
authorAkihiko Odaki <akihiko.odaki@daynix.com>
Mon, 1 Jul 2024 11:58:04 +0000 (20:58 +0900)
committerMichael Tokarev <mjt@tls.msk.ru>
Tue, 6 Aug 2024 14:18:08 +0000 (17:18 +0300)
Ensure the queue index points to a valid queue when software RSS
enabled. The new calculation matches with the behavior of Linux's TAP
device with the RSS eBPF program.

Fixes: 4474e37a5b3a ("virtio-net: implement RX RSS processing")
Reported-by: Zhibin Hu <huzhibin5@huawei.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
(cherry picked from commit f1595ceb9aad36a6c1da95bcb77ab9509b38822d)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Fixes: CVE-2024-6505
hw/net/virtio-net.c

index beadea5bf8cc3fcadceef31e4f8d3ad8476c5212..ebee5db1bcc016e390163951745218af5b0e5ea1 100644 (file)
@@ -1846,7 +1846,8 @@ static ssize_t virtio_net_receive_rcu(NetClientState *nc, const uint8_t *buf,
     if (!no_rss && n->rss_data.enabled && n->rss_data.enabled_software_rss) {
         int index = virtio_net_process_rss(nc, buf, size);
         if (index >= 0) {
-            NetClientState *nc2 = qemu_get_subqueue(n->nic, index);
+            NetClientState *nc2 =
+                qemu_get_subqueue(n->nic, index % n->curr_queue_pairs);
             return virtio_net_receive_rcu(nc2, buf, size, true);
         }
     }