From f5b4a7d1e32a2cf5ba91232e4193e76164ff9a8c Mon Sep 17 00:00:00 2001 From: Chen Qun Date: Wed, 18 Aug 2021 14:05:05 +0200 Subject: [PATCH 1/3] uas: add stream number sanity checks. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The device uses the guest-supplied stream number unchecked, which can lead to guest-triggered out-of-band access to the UASDevice->data3 and UASDevice->status3 fields. Add the missing checks. Fixes: CVE-2021-3713 Signed-off-by: Gerd Hoffmann Reported-by: Chen Zhe Reported-by: Tan Jingguo Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20210818120505.1258262-2-kraxel@redhat.com> --- uas-add-stream-number-sanity-checks.patch | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 uas-add-stream-number-sanity-checks.patch diff --git a/uas-add-stream-number-sanity-checks.patch b/uas-add-stream-number-sanity-checks.patch new file mode 100644 index 00000000..a1a4a1ec --- /dev/null +++ b/uas-add-stream-number-sanity-checks.patch @@ -0,0 +1,61 @@ +From 8b9fcc2c362e88491eb1c7621797eb43d66d0193 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 18 Aug 2021 14:05:05 +0200 +Subject: [PATCH] uas: add stream number sanity checks. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The device uses the guest-supplied stream number unchecked, which can +lead to guest-triggered out-of-band access to the UASDevice->data3 and +UASDevice->status3 fields. Add the missing checks. + +Fixes: CVE-2021-3713 +Signed-off-by: Gerd Hoffmann +Reported-by: Chen Zhe +Reported-by: Tan Jingguo +Reviewed-by: Philippe Mathieu-Daudé +Message-Id: <20210818120505.1258262-2-kraxel@redhat.com> +--- + hw/usb/dev-uas.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c +index abd8070d0c..82bbc0d083 100644 +--- a/hw/usb/dev-uas.c ++++ b/hw/usb/dev-uas.c +@@ -827,6 +827,9 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p) + } + break; + case UAS_PIPE_ID_STATUS: ++ if (p->stream > UAS_MAX_STREAMS) { ++ goto err_stream; ++ } + if (p->stream) { + QTAILQ_FOREACH(st, &uas->results, next) { + if (st->stream == p->stream) { +@@ -854,6 +857,9 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p) + break; + case UAS_PIPE_ID_DATA_IN: + case UAS_PIPE_ID_DATA_OUT: ++ if (p->stream > UAS_MAX_STREAMS) { ++ goto err_stream; ++ } + if (p->stream) { + req = usb_uas_find_request(uas, p->stream); + } else { +@@ -889,6 +895,11 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p) + p->status = USB_RET_STALL; + break; + } ++ ++err_stream: ++ error_report("%s: invalid stream %d", __func__, p->stream); ++ p->status = USB_RET_STALL; ++ return; + } + + static void usb_uas_unrealize(USBDevice *dev, Error **errp) +-- +2.27.0 + -- Gitee From 710bcb8e78900d302350971d077405d5fdf0807e Mon Sep 17 00:00:00 2001 From: Chen Qun Date: Wed, 15 Sep 2021 21:27:12 +0800 Subject: [PATCH 2/3] spec: Update patch and changelog with !197 fix CVE-2021-3713 #I49VTJ !197 uas: add stream number sanity checks. Signed-off-by: Chen Qun --- qemu.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/qemu.spec b/qemu.spec index e52dc516..4dae1d60 100644 --- a/qemu.spec +++ b/qemu.spec @@ -332,6 +332,7 @@ Patch0319: target-i386-add-PSCHANGE_NO-bit-for-the-ARCH_CAPABIL.patch Patch0320: target-i386-Export-TAA_NO-bit-to-guests.patch Patch0321: usbredir-fix-free-call.patch Patch0322: hw-arm-virt-Init-PMU-for-hotplugged-vCPU.patch +Patch0323: uas-add-stream-number-sanity-checks.patch BuildRequires: flex BuildRequires: bison @@ -728,6 +729,9 @@ getent passwd qemu >/dev/null || \ %endif %changelog +* Wed Sep 15 2021 Chen Qun +- uas: add stream number sanity checks. + * Tue Aug 31 2021 imxcc - hw/arm/virt:Init PMU for hotplugged vCPU -- Gitee From 255e850459b174b75bc72cd53a9a2e8397a8fb00 Mon Sep 17 00:00:00 2001 From: Chen Qun Date: Wed, 15 Sep 2021 21:27:14 +0800 Subject: [PATCH 3/3] spec: Update release version with !197 increase release verison by one Signed-off-by: Chen Qun --- qemu.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qemu.spec b/qemu.spec index 4dae1d60..9ec8e336 100644 --- a/qemu.spec +++ b/qemu.spec @@ -1,6 +1,6 @@ Name: qemu Version: 4.1.0 -Release: 56 +Release: 57 Epoch: 2 Summary: QEMU is a generic and open source machine emulator and virtualizer License: GPLv2 and BSD and MIT and CC-BY-SA-4.0 -- Gitee