mirror of
https://git.yoctoproject.org/poky
synced 2026-03-06 23:39:40 +01:00
qemu: Backport fix CVE-2023-6693
Upstream-Status: Backport [2220e8189f]
(From OE-Core rev: e993720fc31dbf94bed138b76ce33cbcd61ab9a5)
Signed-off-by: Vivek Kumbhar <vkumbhar@mvista.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
committed by
Steve Sakoman
parent
b9aad2ed8a
commit
3c091d5d04
@@ -104,6 +104,7 @@ SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
|
||||
file://CVE-2023-1544.patch \
|
||||
file://CVE-2023-5088.patch \
|
||||
file://CVE-2024-24474.patch \
|
||||
file://CVE-2023-6693.patch \
|
||||
"
|
||||
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
|
||||
|
||||
|
||||
74
meta/recipes-devtools/qemu/qemu/CVE-2023-6693.patch
Normal file
74
meta/recipes-devtools/qemu/qemu/CVE-2023-6693.patch
Normal file
@@ -0,0 +1,74 @@
|
||||
From 2220e8189fb94068dbad333228659fbac819abb0 Mon Sep 17 00:00:00 2001
|
||||
From: Jason Wang <jasowang@redhat.com>
|
||||
Date: Tue, 2 Jan 2024 11:29:01 +0800
|
||||
Subject: [PATCH] virtio-net: correctly copy vnet header when flushing TX
|
||||
|
||||
When HASH_REPORT is negotiated, the guest_hdr_len might be larger than
|
||||
the size of the mergeable rx buffer header. Using
|
||||
virtio_net_hdr_mrg_rxbuf during the header swap might lead a stack
|
||||
overflow in this case. Fixing this by using virtio_net_hdr_v1_hash
|
||||
instead.
|
||||
|
||||
Reported-by: Xiao Lei <leixiao.nop@zju.edu.cn>
|
||||
Cc: Yuri Benditovich <yuri.benditovich@daynix.com>
|
||||
Cc: qemu-stable@nongnu.org
|
||||
Cc: Mauro Matteo Cascella <mcascell@redhat.com>
|
||||
Fixes: CVE-2023-6693
|
||||
Fixes: e22f0603fb2f ("virtio-net: reference implementation of hash report")
|
||||
Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>
|
||||
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||
|
||||
Upstream-Status: Backport [https://gitlab.com/qemu-project/qemu/-/commit/2220e8189fb94068dbad333228659fbac819abb0]
|
||||
CVE: CVE-2023-6693
|
||||
Signed-off-by: Vivek Kumbhar <vkumbhar@mvista.com>
|
||||
---
|
||||
hw/net/virtio-net.c | 13 +++++++++----
|
||||
1 file changed, 9 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
|
||||
index e1f474883..42e66697f 100644
|
||||
--- a/hw/net/virtio-net.c
|
||||
+++ b/hw/net/virtio-net.c
|
||||
@@ -600,6 +600,11 @@ static void virtio_net_set_mrg_rx_bufs(VirtIONet *n, int mergeable_rx_bufs,
|
||||
|
||||
n->mergeable_rx_bufs = mergeable_rx_bufs;
|
||||
|
||||
+ /*
|
||||
+ * Note: when extending the vnet header, please make sure to
|
||||
+ * change the vnet header copying logic in virtio_net_flush_tx()
|
||||
+ * as well.
|
||||
+ */
|
||||
if (version_1) {
|
||||
n->guest_hdr_len = hash_report ?
|
||||
sizeof(struct virtio_net_hdr_v1_hash) :
|
||||
@@ -2520,7 +2525,7 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q)
|
||||
ssize_t ret;
|
||||
unsigned int out_num;
|
||||
struct iovec sg[VIRTQUEUE_MAX_SIZE], sg2[VIRTQUEUE_MAX_SIZE + 1], *out_sg;
|
||||
- struct virtio_net_hdr_mrg_rxbuf mhdr;
|
||||
+ struct virtio_net_hdr_v1_hash vhdr;
|
||||
|
||||
elem = virtqueue_pop(q->tx_vq, sizeof(VirtQueueElement));
|
||||
if (!elem) {
|
||||
@@ -2537,7 +2542,7 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q)
|
||||
}
|
||||
|
||||
if (n->has_vnet_hdr) {
|
||||
- if (iov_to_buf(out_sg, out_num, 0, &mhdr, n->guest_hdr_len) <
|
||||
+ if (iov_to_buf(out_sg, out_num, 0, &vhdr, n->guest_hdr_len) <
|
||||
n->guest_hdr_len) {
|
||||
virtio_error(vdev, "virtio-net header incorrect");
|
||||
virtqueue_detach_element(q->tx_vq, elem, 0);
|
||||
@@ -2545,8 +2550,8 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q)
|
||||
return -EINVAL;
|
||||
}
|
||||
if (n->needs_vnet_hdr_swap) {
|
||||
- virtio_net_hdr_swap(vdev, (void *) &mhdr);
|
||||
- sg2[0].iov_base = &mhdr;
|
||||
+ virtio_net_hdr_swap(vdev, (void *) &vhdr);
|
||||
+ sg2[0].iov_base = &vhdr;
|
||||
sg2[0].iov_len = n->guest_hdr_len;
|
||||
out_num = iov_copy(&sg2[1], ARRAY_SIZE(sg2) - 1,
|
||||
out_sg, out_num,
|
||||
--
|
||||
2.34.1
|
||||
Reference in New Issue
Block a user