mirror of
https://git.yoctoproject.org/poky
synced 2026-04-23 09:32:17 +02:00
qemu: fix CVE-2021-20196 block fdc null pointer dereference may lead to guest crash
Upstream-Status: Backport [1ab95af033]
(From OE-Core rev: 1523fcbb6fef60d30c07377673fca265c5c9781c)
Signed-off-by: Vivek Kumbhar <vkumbhar@mvista.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
44c4df6fba
commit
5a4433a52b
@@ -113,6 +113,7 @@ SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
|
||||
file://CVE-2022-0216-2.patch \
|
||||
file://CVE-2021-3750.patch \
|
||||
file://CVE-2021-3638.patch \
|
||||
file://CVE-2021-20196.patch \
|
||||
"
|
||||
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
|
||||
|
||||
|
||||
62
meta/recipes-devtools/qemu/qemu/CVE-2021-20196.patch
Normal file
62
meta/recipes-devtools/qemu/qemu/CVE-2021-20196.patch
Normal file
@@ -0,0 +1,62 @@
|
||||
From 94608c59045791dfd35102bc59b792e96f2cfa30 Mon Sep 17 00:00:00 2001
|
||||
From: Vivek Kumbhar <vkumbhar@mvista.com>
|
||||
Date: Tue, 29 Nov 2022 15:57:13 +0530
|
||||
Subject: [PATCH] CVE-2021-20196
|
||||
|
||||
Upstream-Status: Backport [https://gitlab.com/qemu-project/qemu/-/commit/1ab95af033a419e7a64e2d58e67dd96b20af5233]
|
||||
CVE: CVE-2021-20196
|
||||
Signed-off-by: Vivek Kumbhar <vkumbhar@mvista.com>
|
||||
|
||||
hw/block/fdc: Kludge missing floppy drive to fix CVE-2021-20196
|
||||
|
||||
Guest might select another drive on the bus by setting the
|
||||
DRIVE_SEL bit of the DIGITAL OUTPUT REGISTER (DOR).
|
||||
The current controller model doesn't expect a BlockBackend
|
||||
to be NULL. A simple way to fix CVE-2021-20196 is to create
|
||||
an empty BlockBackend when it is missing. All further
|
||||
accesses will be safely handled, and the controller state
|
||||
machines keep behaving correctly.
|
||||
---
|
||||
hw/block/fdc.c | 19 ++++++++++++++++++-
|
||||
1 file changed, 18 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
|
||||
index ac5d31e8..e128e975 100644
|
||||
--- a/hw/block/fdc.c
|
||||
+++ b/hw/block/fdc.c
|
||||
@@ -58,6 +58,11 @@
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
+/* Anonymous BlockBackend for empty drive */
|
||||
+static BlockBackend *blk_create_empty_drive(void)
|
||||
+{
|
||||
+ return blk_new(qemu_get_aio_context(), 0, BLK_PERM_ALL);
|
||||
+}
|
||||
|
||||
/********************************************************/
|
||||
/* qdev floppy bus */
|
||||
@@ -1356,7 +1361,19 @@ static FDrive *get_drv(FDCtrl *fdctrl, int unit)
|
||||
|
||||
static FDrive *get_cur_drv(FDCtrl *fdctrl)
|
||||
{
|
||||
- return get_drv(fdctrl, fdctrl->cur_drv);
|
||||
+ FDrive *cur_drv = get_drv(fdctrl, fdctrl->cur_drv);
|
||||
+
|
||||
+ if (!cur_drv->blk) {
|
||||
+ /*
|
||||
+ * Kludge: empty drive line selected. Create an anonymous
|
||||
+ * BlockBackend to avoid NULL deref with various BlockBackend
|
||||
+ * API calls within this model (CVE-2021-20196).
|
||||
+ * Due to the controller QOM model limitations, we don't
|
||||
+ * attach the created to the controller device.
|
||||
+ */
|
||||
+ cur_drv->blk = blk_create_empty_drive();
|
||||
+ }
|
||||
+ return cur_drv;
|
||||
}
|
||||
|
||||
/* Status A register : 0x00 (read-only) */
|
||||
--
|
||||
2.25.1
|
||||
|
||||
Reference in New Issue
Block a user