[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/11] xen/MSI: don't open-code pass-through of enab
From: |
Stefano Stabellini |
Subject: |
[Qemu-devel] [PATCH 04/11] xen/MSI: don't open-code pass-through of enable bit modifications |
Date: |
Tue, 2 Jun 2015 16:10:38 +0100 |
From: Jan Beulich <address@hidden>
Without this the actual XSA-131 fix would cause the enable bit to not
get set anymore (due to the write back getting suppressed there based
on the OR of emu_mask, ro_mask, and res_mask).
Note that the fiddling with the enable bit shouldn't really be done by
qemu, but making this work right (via libxc and the hypervisor) will
require more extensive changes, which can be postponed until after the
security issue got addressed.
This is a preparatory patch for XSA-131.
Signed-off-by: Jan Beulich <address@hidden>
Acked-by: Stefano Stabellini <address@hidden>
---
hw/xen/xen_pt_config_init.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c
index 68b8f22..436d0fd 100644
--- a/hw/xen/xen_pt_config_init.c
+++ b/hw/xen/xen_pt_config_init.c
@@ -1053,7 +1053,6 @@ static int
xen_pt_msgctrl_reg_write(XenPCIPassthroughState *s,
XenPTMSI *msi = s->msi;
uint16_t writable_mask = 0;
uint16_t throughable_mask = 0;
- uint16_t raw_val;
/* Currently no support for multi-vector */
if (*val & PCI_MSI_FLAGS_QSIZE) {
@@ -1066,12 +1065,11 @@ static int
xen_pt_msgctrl_reg_write(XenPCIPassthroughState *s,
msi->flags |= cfg_entry->data & ~PCI_MSI_FLAGS_ENABLE;
/* create value for writing to I/O device register */
- raw_val = *val;
throughable_mask = ~reg->emu_mask & valid_mask;
*val = XEN_PT_MERGE_VALUE(*val, dev_value, throughable_mask);
/* update MSI */
- if (raw_val & PCI_MSI_FLAGS_ENABLE) {
+ if (*val & PCI_MSI_FLAGS_ENABLE) {
/* setup MSI pirq for the first time */
if (!msi->initialized) {
/* Init physical one */
@@ -1099,10 +1097,6 @@ static int
xen_pt_msgctrl_reg_write(XenPCIPassthroughState *s,
xen_pt_msi_disable(s);
}
- /* pass through MSI_ENABLE bit */
- *val &= ~PCI_MSI_FLAGS_ENABLE;
- *val |= raw_val & PCI_MSI_FLAGS_ENABLE;
-
return 0;
}
@@ -1301,7 +1295,7 @@ static XenPTRegInfo xen_pt_emu_reg_msi[] = {
.size = 2,
.init_val = 0x0000,
.ro_mask = 0xFF8E,
- .emu_mask = 0x017F,
+ .emu_mask = 0x017E,
.init = xen_pt_msgctrl_reg_init,
.u.w.read = xen_pt_word_reg_read,
.u.w.write = xen_pt_msgctrl_reg_write,
--
1.7.10.4
- [Qemu-devel] [PATCH 0/11] Xen PCI Passthrough security fixes, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 01/11] xen: properly gate host writes of modified PCI CFG contents, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 02/11] xen: don't allow guest to control MSI mask register, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 10/11] xen/pt: add a few PCI config space field descriptions, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 04/11] xen/MSI: don't open-code pass-through of enable bit modifications,
Stefano Stabellini <=
- [Qemu-devel] [PATCH 07/11] xen/pt: split out calculation of throughable mask in PCI config space handling, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 08/11] xen/pt: mark all PCIe capability bits read-only, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 05/11] xen/pt: consolidate PM capability emu_mask, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 09/11] xen/pt: mark reserved bits in PCI config space fields, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 06/11] xen/pt: correctly handle PM status bit, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 03/11] xen/MSI-X: limit error messages, Stefano Stabellini, 2015/06/02
- [Qemu-devel] [PATCH 11/11] xen/pt: unknown PCI config space fields should be read-only, Stefano Stabellini, 2015/06/02
- Re: [Qemu-devel] [PATCH 0/11] Xen PCI Passthrough security fixes, Stefano Stabellini, 2015/06/02
- Re: [Qemu-devel] [Xen-devel] [PATCH 0/11] Xen PCI Passthrough security fixes, Ian Campbell, 2015/06/02