android_kernel_oneplus_msm8998/drivers/iommu
Julia Cartwright 3d11671070 iommu/dmar: Fix buffer overflow during PCI bus notification
[ Upstream commit cffaaf0c816238c45cd2d06913476c83eb50f682 ]

Commit 57384592c4 ("iommu/vt-d: Store bus information in RMRR PCI
device path") changed the type of the path data, however, the change in
path type was not reflected in size calculations.  Update to use the
correct type and prevent a buffer overflow.

This bug manifests in systems with deep PCI hierarchies, and can lead to
an overflow of the static allocated buffer (dmar_pci_notify_info_buf),
or can lead to overflow of slab-allocated data.

   BUG: KASAN: global-out-of-bounds in dmar_alloc_pci_notify_info+0x1d5/0x2e0
   Write of size 1 at addr ffffffff90445d80 by task swapper/0/1
   CPU: 0 PID: 1 Comm: swapper/0 Tainted: G        W       4.14.87-rt49-02406-gd0a0e96 #1
   Call Trace:
    ? dump_stack+0x46/0x59
    ? print_address_description+0x1df/0x290
    ? dmar_alloc_pci_notify_info+0x1d5/0x2e0
    ? kasan_report+0x256/0x340
    ? dmar_alloc_pci_notify_info+0x1d5/0x2e0
    ? e820__memblock_setup+0xb0/0xb0
    ? dmar_dev_scope_init+0x424/0x48f
    ? __down_write_common+0x1ec/0x230
    ? dmar_dev_scope_init+0x48f/0x48f
    ? dmar_free_unused_resources+0x109/0x109
    ? cpumask_next+0x16/0x20
    ? __kmem_cache_create+0x392/0x430
    ? kmem_cache_create+0x135/0x2f0
    ? e820__memblock_setup+0xb0/0xb0
    ? intel_iommu_init+0x170/0x1848
    ? _raw_spin_unlock_irqrestore+0x32/0x60
    ? migrate_enable+0x27a/0x5b0
    ? sched_setattr+0x20/0x20
    ? migrate_disable+0x1fc/0x380
    ? task_rq_lock+0x170/0x170
    ? try_to_run_init_process+0x40/0x40
    ? locks_remove_file+0x85/0x2f0
    ? dev_prepare_static_identity_mapping+0x78/0x78
    ? rt_spin_unlock+0x39/0x50
    ? lockref_put_or_lock+0x2a/0x40
    ? dput+0x128/0x2f0
    ? __rcu_read_unlock+0x66/0x80
    ? __fput+0x250/0x300
    ? __rcu_read_lock+0x1b/0x30
    ? mntput_no_expire+0x38/0x290
    ? e820__memblock_setup+0xb0/0xb0
    ? pci_iommu_init+0x25/0x63
    ? pci_iommu_init+0x25/0x63
    ? do_one_initcall+0x7e/0x1c0
    ? initcall_blacklisted+0x120/0x120
    ? kernel_init_freeable+0x27b/0x307
    ? rest_init+0xd0/0xd0
    ? kernel_init+0xf/0x120
    ? rest_init+0xd0/0xd0
    ? ret_from_fork+0x1f/0x40
   The buggy address belongs to the variable:
    dmar_pci_notify_info_buf+0x40/0x60

Fixes: 57384592c4 ("iommu/vt-d: Store bus information in RMRR PCI device path")
Signed-off-by: Julia Cartwright <julia@ni.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-04-27 09:33:59 +02:00
..
amd_iommu.c iommu/amd: Fix IOMMU page flush when detach device from a domain 2019-03-23 08:44:24 +01:00
amd_iommu_init.c iommu/amd: Fix unity mapping initialization race 2016-07-27 09:47:32 -07:00
amd_iommu_proto.h
amd_iommu_types.h IOMMU Updates for Linux v4.4 2015-11-05 16:12:10 -08:00
amd_iommu_v2.c iommu/amd: Fix incorrect error handling in amd_iommu_bind_pasid() 2017-07-05 14:37:22 +02:00
arm-smmu-v3.c iommu/arm-smmu-v3: Use explicit mb() when moving cons pointer 2019-02-20 10:13:08 +01:00
arm-smmu.c Merge branches 'x86/vt-d', 'arm/omap', 'arm/smmu', 's390', 'core' and 'x86/amd' into next 2015-11-02 20:03:34 +09:00
dma-iommu.c iommu/dma: Don't put uninitialised IOVA domains 2016-09-07 08:32:40 +02:00
dmar.c iommu/dmar: Fix buffer overflow during PCI bus notification 2019-04-27 09:33:59 +02:00
exynos-iommu.c iommu/exynos: Suppress unbinding to prevent system failure 2016-08-20 18:09:21 +02:00
fsl_pamu.c powerpc/fsl: Move fsl_guts.h out of arch/powerpc 2015-10-21 18:05:50 -05:00
fsl_pamu.h
fsl_pamu_domain.c
fsl_pamu_domain.h
intel-iommu.c iommu/vt-d: Check capability before disabling protected memory 2019-04-27 09:33:57 +02:00
intel-svm.c iommu/vt-d: Fix NULL pointer dereference in prq_event_thread() 2018-12-13 09:21:34 +01:00
intel_irq_remapping.c x86/cpufeature: Remove unused and seldomly used cpu_has_xx macros 2018-06-16 09:54:24 +02:00
io-pgtable-arm.c iommu/io-pgtable-arm: Check for leaf entry before dereferencing it 2017-10-08 10:14:19 +02:00
io-pgtable.c
io-pgtable.h
iommu-sysfs.c
iommu-traces.c
iommu.c iommu: Handle default domain attach failure 2017-07-05 14:37:22 +02:00
iova.c iommu/iova: Fix underflow bug in __alloc_and_insert_iova_range 2018-03-22 09:23:24 +01:00
ipmmu-vmsa.c iommu/ipmmu-vmsa: Fix crash on early domain free 2018-12-13 09:21:34 +01:00
irq_remapping.c
irq_remapping.h
Kconfig IOMMU Updates for Linux v4.4 2015-11-05 16:12:10 -08:00
Makefile IOMMU Updates for Linux v4.4 2015-11-05 16:12:10 -08:00
msm_iommu.c
msm_iommu.h
msm_iommu_dev.c
msm_iommu_hw-8xxx.h
of_iommu.c
omap-iommu-debug.c
omap-iommu.c iommu/omap: Register driver before setting IOMMU ops 2018-03-24 10:58:42 +01:00
omap-iommu.h
omap-iopgtable.h
rockchip-iommu.c
s390-iommu.c s390/pci_dma: handle dma table failures 2015-11-09 09:10:49 +01:00
shmobile-iommu.c
shmobile-ipmmu.c
shmobile-ipmmu.h
tegra-gart.c
tegra-smmu.c