diff options
author | Jan Beulich <jbeulich@suse.com> | 2013-08-27 15:26:10 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-08-27 15:26:10 +0200 |
commit | 24ddc6f52635a6d4bb7a5ff0bbdfa168d8a2cb50 (patch) | |
tree | 680cbfbf6eedf9b1328245b08120c3899f66d00a | |
parent | f37de503d4d580b4fa3c04965e9dc416c040cab5 (diff) | |
download | xen-24ddc6f52635a6d4bb7a5ff0bbdfa168d8a2cb50.tar.gz xen-24ddc6f52635a6d4bb7a5ff0bbdfa168d8a2cb50.tar.bz2 xen-24ddc6f52635a6d4bb7a5ff0bbdfa168d8a2cb50.zip |
VT-d: warn about Compatibility Format Interrupts being enabled by firmware
... as being insecure.
Also drop the second (redundant) read DMAR_GSTS_REG from enable_intremap().
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by Xiantao Zhang <xiantao.zhang@intel.com>
master commit: c9c6abab583d27fdca1d979a7f1d18ae30f54e9b
master date: 2013-08-21 16:44:58 +0200
-rw-r--r-- | xen/drivers/passthrough/vtd/intremap.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/xen/drivers/passthrough/vtd/intremap.c b/xen/drivers/passthrough/vtd/intremap.c index feaaed0d89..e6ef9f1b9c 100644 --- a/xen/drivers/passthrough/vtd/intremap.c +++ b/xen/drivers/passthrough/vtd/intremap.c @@ -706,8 +706,8 @@ int enable_intremap(struct iommu *iommu, int eim) if ( !platform_supports_intremap() ) { - dprintk(XENLOG_ERR VTDPREFIX, - "Platform firmware does not support interrupt remapping\n"); + printk(XENLOG_ERR VTDPREFIX + " Platform firmware does not support interrupt remapping\n"); return -EINVAL; } @@ -718,15 +718,19 @@ int enable_intremap(struct iommu *iommu, int eim) if ( (sts & DMA_GSTS_IRES) && ir_ctrl->iremap_maddr ) return 0; - sts = dmar_readl(iommu->reg, DMAR_GSTS_REG); if ( !(sts & DMA_GSTS_QIES) ) { - dprintk(XENLOG_ERR VTDPREFIX, - "Queued invalidation is not enabled, should not enable " - "interrupt remapping\n"); + printk(XENLOG_ERR VTDPREFIX + " Queued invalidation is not enabled on IOMMU #%u:" + " Should not enable interrupt remapping\n", iommu->index); return -EINVAL; } + if ( !eim && (sts & DMA_GSTS_CFIS) ) + printk(XENLOG_WARNING VTDPREFIX + " Compatibility Format Interrupts permitted on IOMMU #%u:" + " Device pass-through will be insecure\n", iommu->index); + if ( ir_ctrl->iremap_maddr == 0 ) { drhd = iommu_to_drhd(iommu); |