From: Jan Beulich Date: Fri, 23 May 2014 13:41:34 +0000 (+0200) Subject: VT-d: extend error report masking workaround to newer chipsets X-Git-Tag: 4.2.5-rc1~10 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=269b6538fadb56161c39b398118a0682d25a7071;p=xen.git VT-d: extend error report masking workaround to newer chipsets Add two more PCI IDs to the set that has been taken care of with a different workaround long before XSA-59, and (for constency with the newer workarounds) log a message here too. Also move the function wide comment to the cases it applies to; this should really have been done by d061d200 ("VT-d: suppress UR signaling for server chipsets"). This is CVE-2013-3495 / XSA-59. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Acked-by: Xiantao Zhang Acked-by: Yang Zhang master commit: 04734664eb20c3bf239e473af182bb7ab901d779 master date: 2014-05-20 15:54:01 +0200 --- diff --git a/xen/drivers/passthrough/vtd/quirks.c b/xen/drivers/passthrough/vtd/quirks.c index 0e1b062e12..bfa25d7bc5 100644 --- a/xen/drivers/passthrough/vtd/quirks.c +++ b/xen/drivers/passthrough/vtd/quirks.c @@ -383,12 +383,6 @@ void me_wifi_quirk(struct domain *domain, u8 bus, u8 devfn, int map) } } -/* - * Mask reporting Intel VT-d faults to IOH core logic: - * - Some platform escalates VT-d faults to platform errors - * - This can cause system failure upon non-fatal VT-d faults - * - Potential security issue if malicious guest trigger VT-d faults - */ void pci_vtd_quirk(const struct pci_dev *pdev) { int seg = pdev->seg; @@ -408,10 +402,20 @@ void pci_vtd_quirk(const struct pci_dev *pdev) int pos; u32 val; + /* + * Mask reporting Intel VT-d faults to IOH core logic: + * - Some platform escalates VT-d faults to platform errors. + * - This can cause system failure upon non-fatal VT-d faults. + * - Potential security issue if malicious guest trigger VT-d faults. + */ + case 0x0e28: /* Xeon-E5v2 (IvyBridge) */ case 0x342e: /* Tylersburg chipset (Nehalem / Westmere systems) */ + case 0x3728: /* Xeon C5500/C3500 (JasperForest) */ case 0x3c28: /* Sandybridge */ val = pci_conf_read32(seg, bus, dev, func, 0x1AC); pci_conf_write32(seg, bus, dev, func, 0x1AC, val | (1 << 31)); + printk(XENLOG_INFO "Masked VT-d error signaling on %04x:%02x:%02x.%u\n", + seg, bus, dev, func); break; /* Tylersburg (EP)/Boxboro (MP) chipsets (NHM-EP/EX, WSM-EP/EX) */