linux/drivers/iommu
Alex Williamson 46ebb7af7b iommu/vt-d: Fix VM domain ID leak
This continues the attempt to fix commit fb170fb4c5 ("iommu/vt-d:
Introduce helper functions to make code symmetric for readability").
The previous attempt in commit 7168440690 ("iommu/vt-d: Detach
domain *only* from attached iommus") overlooked the fact that
dmar_domain.iommu_bmp gets cleared for VM domains when devices are
detached:

intel_iommu_detach_device
  domain_remove_one_dev_info
    domain_detach_iommu

The domain is detached from the iommu, but the iommu is still attached
to the domain, for whatever reason.  Thus when we get to domain_exit(),
we can't rely on iommu_bmp for VM domains to find the active iommus,
we must check them all.  Without that, the corresponding bit in
intel_iommu.domain_ids doesn't get cleared and repeated VM domain
creation and destruction will run out of domain IDs.  Meanwhile we
still can't call iommu_detach_domain() on arbitrary non-VM domains or
we risk clearing in-use domain IDs, as 7168440690 attempted to
address.

It's tempting to modify iommu_detach_domain() to test the domain
iommu_bmp, but the call ordering from domain_remove_one_dev_info()
prevents it being able to work as fb170fb4c5 seems to have intended.
Caching of unused VM domains on the iommu object seems to be the root
of the problem, but this code is far too fragile for that kind of
rework to be proposed for stable, so we simply revert this chunk to
its state prior to fb170fb4c5.

Fixes: fb170fb4c5 ("iommu/vt-d: Introduce helper functions to make
                      code symmetric for readability")
Fixes: 7168440690 ("iommu/vt-d: Detach domain *only* from attached
                      iommus")
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>
Cc: stable@vger.kernel.org # v3.17+
Signed-off-by: Joerg Roedel <jroedel@suse.de>
2015-07-23 14:17:39 +02:00
..
amd_iommu_init.c IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
amd_iommu_proto.h IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
amd_iommu_types.h IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
amd_iommu_v2.c iommu/amd: Fix bug in put_pasid_state_wait 2015-05-04 13:20:22 +02:00
amd_iommu.c IOMMU Fixes for Linux v4.2-rc0 2015-07-01 14:44:22 -07:00
arm-smmu-v3.c iommu/arm-smmu: Skip the execution of CMD_PREFETCH_CONFIG 2015-07-08 17:24:39 +01:00
arm-smmu.c iommu/arm-smmu: Fix broken ATOS check 2015-06-29 21:57:32 +02:00
dmar.c IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
exynos-iommu.c iommu/exynos: Add callback for initializing devices from device tree 2015-05-29 10:50:08 +02:00
fsl_pamu_domain.c iommu/fsl: Make use of domain_alloc and domain_free 2015-03-31 15:32:14 +02:00
fsl_pamu_domain.h iommu/fsl: Make use of domain_alloc and domain_free 2015-03-31 15:32:14 +02:00
fsl_pamu.c iommu/fsl: Various cleanups 2015-02-03 18:47:18 +01:00
fsl_pamu.h iommu/fsl: Various cleanups 2015-02-03 18:47:18 +01:00
intel_irq_remapping.c IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
intel-iommu.c iommu/vt-d: Fix VM domain ID leak 2015-07-23 14:17:39 +02:00
io-pgtable-arm.c iommu/io-pgtable-arm: avoid speculative walks through TTBR1 2015-03-27 13:39:36 +00:00
io-pgtable.c iommu: add ARM LPAE page table allocator 2015-01-19 14:46:44 +00:00
io-pgtable.h iommu: io-pgtable-arm: add non-secure quirk 2015-01-19 14:46:45 +00:00
iommu-sysfs.c iommu: Fix compile error in iommu-sysfs.c 2014-07-07 12:01:21 +02:00
iommu-traces.c
iommu.c iommu: Ignore -ENODEV errors from add_device call-back 2015-06-29 21:57:19 +02:00
iova.c iommu: Fix checkpatch warnings for Missing a blank line after declarations 2015-05-05 17:49:34 +02:00
ipmmu-vmsa.c Merge branches 'iommu/fixes', 'x86/vt-d', 'x86/amd', 'arm/smmu', 'arm/tegra' and 'core' into next 2015-04-02 13:33:19 +02:00
irq_remapping.c iommu, x86: Provide irq_remapping_cap() interface 2015-06-12 11:33:52 +02:00
irq_remapping.h iommu, x86: Setup Posted-Interrupts capability for Intel iommu 2015-06-12 11:33:52 +02:00
Kconfig Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-06-26 13:18:51 -07:00
Makefile iommu/arm-smmu: Add initial driver support for ARM SMMUv3 devices 2015-05-29 11:12:01 +02:00
msm_iommu_dev.c iommu/msm: Use dev_get_platdata() 2014-11-04 15:03:39 +01:00
msm_iommu_hw-8xxx.h
msm_iommu.c iommu/msm: Make use of domain_alloc and domain_free 2015-03-31 15:32:12 +02:00
msm_iommu.h
of_iommu.c of: iommu: Add ptr to OF node arg to of_iommu_configure() 2015-03-03 14:42:55 -06:00
omap-iommu-debug.c iommu/omap: Switch pagetable debugfs entry to use seq_file 2014-10-23 14:33:48 +02:00
omap-iommu.c iommu/omap: Make use of domain_alloc and domain_free 2015-03-31 15:32:02 +02:00
omap-iommu.h iommu/omap: Do not export unneeded functions 2014-10-23 14:33:47 +02:00
omap-iopgtable.h
rockchip-iommu.c Merge branches 'arm/rockchip', 'arm/exynos', 'arm/smmu', 'x86/vt-d', 'x86/amd', 'default-domains' and 'core' into next 2015-06-19 17:17:47 +02:00
shmobile-iommu.c iommu/shmobile: Make use of domain_alloc and domain_free 2015-03-31 15:32:13 +02:00
shmobile-ipmmu.c iommu: drop owner assignment from platform_drivers 2014-10-20 16:20:42 +02:00
shmobile-ipmmu.h
tegra-gart.c Merge branches 'iommu/fixes', 'x86/vt-d', 'x86/amd', 'arm/smmu', 'arm/tegra' and 'core' into next 2015-04-02 13:33:19 +02:00
tegra-smmu.c iommu/tegra-smmu: Add debugfs support 2015-05-04 12:54:23 +02:00