diff --git a/qemu.spec b/qemu.spec index 0765889f5dcacbad390bce147ccd3beb86139b2f..dd12df85917ce99116733f662a0ff90ad4f5b141 100644 --- a/qemu.spec +++ b/qemu.spec @@ -1,6 +1,6 @@ Name: qemu Version: 4.1.0 -Release: 44 +Release: 45 Epoch: 2 Summary: QEMU is a generic and open source machine emulator and virtualizer License: GPLv2 and BSD and MIT and CC-BY @@ -248,6 +248,7 @@ Patch0235: ide-ahci-add-check-to-avoid-null-dereference-CVE-201.patch Patch0236: hw-intc-arm_gic-Fix-interrupt-ID-in-GICD_SGIR-regist.patch Patch0237: usb-limit-combined-packets-to-1-MiB-CVE-2021-3527.patch Patch0238: hw-net-rocker_of_dpa-fix-double-free-bug-of-rocker-d.patch +Patch0239: usbredir-fix-free-call.patch BuildRequires: flex BuildRequires: bison @@ -593,6 +594,9 @@ getent passwd qemu >/dev/null || \ %endif %changelog +* Mon Aug 16 2021 Chen Qun +- usbredir: fix free call + * Tue Jul 13 2021 Chen Qun - hw/net/rocker_of_dpa: fix double free bug of rocker device diff --git a/usbredir-fix-free-call.patch b/usbredir-fix-free-call.patch new file mode 100644 index 0000000000000000000000000000000000000000..71abcc8583ea26117c5bb8888d1af2110af1b1f6 --- /dev/null +++ b/usbredir-fix-free-call.patch @@ -0,0 +1,38 @@ +From 22b89bb0b9470ea3fee4bf7e55c37e99e49e72ce Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 22 Jul 2021 09:27:56 +0200 +Subject: [PATCH] usbredir: fix free call +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +data might point into the middle of a larger buffer, there is a separate +free_on_destroy pointer passed into bufp_alloc() to handle that. It is +only used in the normal workflow though, not when dropping packets due +to the queue being full. Fix that. + +Resolves: https://gitlab.com/qemu-project/qemu/-/issues/491 +Signed-off-by: Gerd Hoffmann +Reviewed-by: Marc-André Lureau +Message-Id: <20210722072756.647673-1-kraxel@redhat.com> +Signed-off-by: imxcc +--- + hw/usb/redirect.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c +index 998fc6e4b0..87338f76da 100644 +--- a/hw/usb/redirect.c ++++ b/hw/usb/redirect.c +@@ -459,7 +459,7 @@ static int bufp_alloc(USBRedirDevice *dev, uint8_t *data, uint16_t len, + if (dev->endpoint[EP2I(ep)].bufpq_dropping_packets) { + if (dev->endpoint[EP2I(ep)].bufpq_size > + dev->endpoint[EP2I(ep)].bufpq_target_size) { +- free(data); ++ free(free_on_destroy); + return -1; + } + dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0; +-- +2.27.0 +