CVE: fix CVE-2020-11869
backport from qemu upstream: https://git.qemu.org/?p=qemu.git;a=commit;h=ac2071c3791b67fc7af78b8ceb320c01ca1b5df7 Signed-off-by: Ying Fang <fangying1@huawei.com>
This commit is contained in:
parent
f645d20455
commit
cc6571bce3
91
ati-vga-Fix-checks-in-ati_2d_blt-to-avoid-crash.patch
Normal file
91
ati-vga-Fix-checks-in-ati_2d_blt-to-avoid-crash.patch
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
From ac2071c3791b67fc7af78b8ceb320c01ca1b5df7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: BALATON Zoltan <balaton@eik.bme.hu>
|
||||||
|
Date: Mon, 6 Apr 2020 22:34:26 +0200
|
||||||
|
Subject: [PATCH] ati-vga: Fix checks in ati_2d_blt() to avoid crash
|
||||||
|
|
||||||
|
In some corner cases (that never happen during normal operation but a
|
||||||
|
malicious guest could program wrong values) pixman functions were
|
||||||
|
called with parameters that result in a crash. Fix this and add more
|
||||||
|
checks to disallow such cases.
|
||||||
|
|
||||||
|
Reported-by: Ziming Zhang <ezrakiez@gmail.com>
|
||||||
|
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
|
||||||
|
Message-id: 20200406204029.19559747D5D@zero.eik.bme.hu
|
||||||
|
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c
|
||||||
|
index 42e82311eb..23a8ae0cd8 100644
|
||||||
|
--- a/hw/display/ati_2d.c
|
||||||
|
+++ b/hw/display/ati_2d.c
|
||||||
|
@@ -53,12 +53,20 @@ void ati_2d_blt(ATIVGAState *s)
|
||||||
|
s->vga.vbe_start_addr, surface_data(ds), surface_stride(ds),
|
||||||
|
surface_bits_per_pixel(ds),
|
||||||
|
(s->regs.dp_mix & GMC_ROP3_MASK) >> 16);
|
||||||
|
- int dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
|
||||||
|
- s->regs.dst_x : s->regs.dst_x + 1 - s->regs.dst_width);
|
||||||
|
- int dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
|
||||||
|
- s->regs.dst_y : s->regs.dst_y + 1 - s->regs.dst_height);
|
||||||
|
+ unsigned dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
|
||||||
|
+ s->regs.dst_x : s->regs.dst_x + 1 - s->regs.dst_width);
|
||||||
|
+ unsigned dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
|
||||||
|
+ s->regs.dst_y : s->regs.dst_y + 1 - s->regs.dst_height);
|
||||||
|
int bpp = ati_bpp_from_datatype(s);
|
||||||
|
+ if (!bpp) {
|
||||||
|
+ qemu_log_mask(LOG_GUEST_ERROR, "Invalid bpp\n");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
int dst_stride = DEFAULT_CNTL ? s->regs.dst_pitch : s->regs.default_pitch;
|
||||||
|
+ if (!dst_stride) {
|
||||||
|
+ qemu_log_mask(LOG_GUEST_ERROR, "Zero dest pitch\n");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
uint8_t *dst_bits = s->vga.vram_ptr + (DEFAULT_CNTL ?
|
||||||
|
s->regs.dst_offset : s->regs.default_offset);
|
||||||
|
|
||||||
|
@@ -82,12 +90,16 @@ void ati_2d_blt(ATIVGAState *s)
|
||||||
|
switch (s->regs.dp_mix & GMC_ROP3_MASK) {
|
||||||
|
case ROP3_SRCCOPY:
|
||||||
|
{
|
||||||
|
- int src_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
|
||||||
|
- s->regs.src_x : s->regs.src_x + 1 - s->regs.dst_width);
|
||||||
|
- int src_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
|
||||||
|
- s->regs.src_y : s->regs.src_y + 1 - s->regs.dst_height);
|
||||||
|
+ unsigned src_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
|
||||||
|
+ s->regs.src_x : s->regs.src_x + 1 - s->regs.dst_width);
|
||||||
|
+ unsigned src_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
|
||||||
|
+ s->regs.src_y : s->regs.src_y + 1 - s->regs.dst_height);
|
||||||
|
int src_stride = DEFAULT_CNTL ?
|
||||||
|
s->regs.src_pitch : s->regs.default_pitch;
|
||||||
|
+ if (!src_stride) {
|
||||||
|
+ qemu_log_mask(LOG_GUEST_ERROR, "Zero source pitch\n");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
uint8_t *src_bits = s->vga.vram_ptr + (DEFAULT_CNTL ?
|
||||||
|
s->regs.src_offset : s->regs.default_offset);
|
||||||
|
|
||||||
|
@@ -137,8 +149,10 @@ void ati_2d_blt(ATIVGAState *s)
|
||||||
|
dst_y * surface_stride(ds),
|
||||||
|
s->regs.dst_height * surface_stride(ds));
|
||||||
|
}
|
||||||
|
- s->regs.dst_x += s->regs.dst_width;
|
||||||
|
- s->regs.dst_y += s->regs.dst_height;
|
||||||
|
+ s->regs.dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
|
||||||
|
+ dst_x + s->regs.dst_width : dst_x);
|
||||||
|
+ s->regs.dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
|
||||||
|
+ dst_y + s->regs.dst_height : dst_y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ROP3_PATCOPY:
|
||||||
|
@@ -179,7 +193,8 @@ void ati_2d_blt(ATIVGAState *s)
|
||||||
|
dst_y * surface_stride(ds),
|
||||||
|
s->regs.dst_height * surface_stride(ds));
|
||||||
|
}
|
||||||
|
- s->regs.dst_y += s->regs.dst_height;
|
||||||
|
+ s->regs.dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
|
||||||
|
+ dst_y + s->regs.dst_height : dst_y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -163,6 +163,7 @@ Patch0150: migration-ram-fix-memleaks-in-multifd_new_send_chann.patch
|
|||||||
Patch0151: migration-rdma-fix-a-memleak-on-error-path-in-rdma_s.patch
|
Patch0151: migration-rdma-fix-a-memleak-on-error-path-in-rdma_s.patch
|
||||||
Patch0152: arm-virt-Support-CPU-cold-plug.patch
|
Patch0152: arm-virt-Support-CPU-cold-plug.patch
|
||||||
Patch0153: ide-Fix-incorrect-handling-of-some-PRDTs-in-ide_dma_.patch
|
Patch0153: ide-Fix-incorrect-handling-of-some-PRDTs-in-ide_dma_.patch
|
||||||
|
Patch0154: ati-vga-Fix-checks-in-ati_2d_blt-to-avoid-crash.patch
|
||||||
|
|
||||||
BuildRequires: flex
|
BuildRequires: flex
|
||||||
BuildRequires: bison
|
BuildRequires: bison
|
||||||
@ -510,6 +511,7 @@ getent passwd qemu >/dev/null || \
|
|||||||
%changelog
|
%changelog
|
||||||
* Fri May 15 2020 Huawei Technologies Co., Ltd. <fangying1@huawei.com>
|
* Fri May 15 2020 Huawei Technologies Co., Ltd. <fangying1@huawei.com>
|
||||||
- ide: Fix incorrect handling of some PRDTs in ide_dma_cb()
|
- ide: Fix incorrect handling of some PRDTs in ide_dma_cb()
|
||||||
|
- ati-vga: Fix checks in ati_2d_blt() to avoid crash
|
||||||
|
|
||||||
* Tue May 12 2020 Huawei Technologies Co., Ltd. <zhukeqian1@huawei.com>
|
* Tue May 12 2020 Huawei Technologies Co., Ltd. <zhukeqian1@huawei.com>
|
||||||
- arm/virt: Support CPU cold plug
|
- arm/virt: Support CPU cold plug
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user