mirror of
https://git.yoctoproject.org/poky
synced 2026-09-29 07:36:20 +02:00
qemu: apic: fallthrough to PIC
Backport a commit from qemu upstream to fix a protection fault https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg00878.html (From OE-Core rev: 88a4a872a7f22be52faa965bc05c57d8466e0eed) Signed-off-by: He Zhe <zhe.he@windriver.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
From bef93bb81588b5323a52d2e1886f2a77b64a976b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Asselstine <mark.asselstine@windriver.com>
|
||||||
|
Date: Tue, 26 Feb 2013 11:43:28 -0500
|
||||||
|
Subject: [PATCH 03/18] apic: fixup fallthrough to PIC
|
||||||
|
|
||||||
|
Commit 0e21e12bb311c4c1095d0269dc2ef81196ccb60a [Don't route PIC
|
||||||
|
interrupts through the local APIC if the local APIC config says so.]
|
||||||
|
missed a check to ensure the local APIC is enabled. Since if the local
|
||||||
|
APIC is disabled it doesn't matter what the local APIC config says.
|
||||||
|
|
||||||
|
If this check isn't done and the guest has disabled the local APIC the
|
||||||
|
guest will receive a general protection fault, similar to what is seen
|
||||||
|
here:
|
||||||
|
|
||||||
|
https://lists.gnu.org/archive/html/qemu-devel/2012-12/msg02304.html
|
||||||
|
|
||||||
|
The GPF is caused by an attempt to service interrupt 0xffffffff. This
|
||||||
|
comes about since cpu_get_pic_interrupt() calls apic_accept_pic_intr()
|
||||||
|
(with the local APIC disabled apic_get_interrupt() returns -1).
|
||||||
|
apic_accept_pic_intr() returns 0 and thus the interrupt number which
|
||||||
|
is returned from cpu_get_pic_interrupt(), and which is attempted to be
|
||||||
|
serviced, is -1.
|
||||||
|
|
||||||
|
Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
|
||||||
|
Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg00878.html]
|
||||||
|
Signed-off-by: He Zhe <zhe.he@windriver.com>
|
||||||
|
---
|
||||||
|
hw/intc/apic.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/hw/intc/apic.c b/hw/intc/apic.c
|
||||||
|
index 45887d99..c5ae4087 100644
|
||||||
|
--- a/hw/intc/apic.c
|
||||||
|
+++ b/hw/intc/apic.c
|
||||||
|
@@ -587,7 +587,7 @@ int apic_accept_pic_intr(DeviceState *dev)
|
||||||
|
APICCommonState *s = APIC_COMMON(dev);
|
||||||
|
uint32_t lvt0;
|
||||||
|
|
||||||
|
- if (!s)
|
||||||
|
+ if (!s || !(s->spurious_vec & APIC_SV_ENABLE))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
lvt0 = s->lvt[APIC_LVT_LINT0];
|
||||||
|
--
|
||||||
|
2.11.0
|
||||||
|
|
||||||
@@ -27,6 +27,7 @@ SRC_URI = "http://wiki.qemu-project.org/download/${BP}.tar.bz2 \
|
|||||||
file://CVE-2016-9908.patch \
|
file://CVE-2016-9908.patch \
|
||||||
file://CVE-2016-9912.patch \
|
file://CVE-2016-9912.patch \
|
||||||
file://0001-replace-struct-ucontext-with-ucontext_t-type.patch \
|
file://0001-replace-struct-ucontext-with-ucontext_t-type.patch \
|
||||||
|
file://apic-fixup-fallthrough-to-PIC.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
SRC_URI_append_class-native = " \
|
SRC_URI_append_class-native = " \
|
||||||
|
|||||||
Reference in New Issue
Block a user