1. 21 10月, 2022 1 次提交
  2. 11 9月, 2022 1 次提交
    • J
      iommu: Fix false ownership failure on AMD systems with PASID activated · 2380f1e8
      Jason Gunthorpe 提交于
      The AMD IOMMU driver cannot activate PASID mode on a RID without the RID's
      translation being set to IDENTITY. Further it requires changing the RID's
      page table layout from the normal v1 IOMMU_DOMAIN_IDENTITY layout to a
      different v2 layout.
      
      It does this by creating a new iommu_domain, configuring that domain for
      v2 identity operation and then attaching it to the group, from within the
      driver. This logic assumes the group is already set to the IDENTITY domain
      and is being used by the DMA API.
      
      However, since the ownership logic is based on the group's domain pointer
      equaling the default domain to detect DMA API ownership, this causes it to
      look like the group is not attached to the DMA API any more. This blocks
      attaching drivers to any other devices in the group.
      
      In a real system this manifests itself as the HD-audio devices on some AMD
      platforms losing their device drivers.
      
      Work around this unique behavior of the AMD driver by checking for
      equality of IDENTITY domains based on their type, not their pointer
      value. This allows the AMD driver to have two IDENTITY domains for
      internal purposes without breaking the check.
      
      Have the AMD driver properly declare that the special domain it created is
      actually an IDENTITY domain.
      
      Cc: Robin Murphy <robin.murphy@arm.com>
      Cc: stable@vger.kernel.org
      Fixes: 512881ea ("bus: platform,amba,fsl-mc,PCI: Add device DMA ownership management")
      Reported-by: NTakashi Iwai <tiwai@suse.de>
      Tested-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NJason Gunthorpe <jgg@nvidia.com>
      Reviewed-by: NRobin Murphy <robin.murphy@arm.com>
      Link: https://lore.kernel.org/r/0-v1-ea566e16b06b+811-amd_owner_jgg@nvidia.comSigned-off-by: NJoerg Roedel <jroedel@suse.de>
      2380f1e8
  3. 09 9月, 2022 1 次提交
  4. 07 9月, 2022 6 次提交
  5. 26 7月, 2022 1 次提交
  6. 15 7月, 2022 2 次提交
  7. 06 7月, 2022 3 次提交
  8. 22 6月, 2022 1 次提交
  9. 13 5月, 2022 1 次提交
  10. 04 5月, 2022 1 次提交
  11. 28 4月, 2022 3 次提交
  12. 28 2月, 2022 6 次提交
  13. 31 1月, 2022 2 次提交
    • J
      iommu: Fix some W=1 warnings · 30209b93
      John Garry 提交于
      The code is mostly free of W=1 warning, so fix the following:
      
      drivers/iommu/iommu.c:996: warning: expecting prototype for iommu_group_for_each_dev(). Prototype was for __iommu_group_for_each_dev() instead
      drivers/iommu/iommu.c:3048: warning: Function parameter or member 'drvdata' not described in 'iommu_sva_bind_device'
      drivers/iommu/ioasid.c:354: warning: Function parameter or member 'ioasid' not described in 'ioasid_get'
      drivers/iommu/omap-iommu.c:1098: warning: expecting prototype for omap_iommu_suspend_prepare(). Prototype was for omap_iommu_prepare() instead
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Reviewed-by: NRobin Murphy <robin.murphy@arm.com>
      Link: https://lore.kernel.org/r/1643366673-26803-1-git-send-email-john.garry@huawei.comSigned-off-by: NJoerg Roedel <jroedel@suse.de>
      30209b93
    • V
      iommu: Fix potential use-after-free during probe · b54240ad
      Vijayanand Jitta 提交于
      Kasan has reported the following use after free on dev->iommu.
      when a device probe fails and it is in process of freeing dev->iommu
      in dev_iommu_free function, a deferred_probe_work_func runs in parallel
      and tries to access dev->iommu->fwspec in of_iommu_configure path thus
      causing use after free.
      
      BUG: KASAN: use-after-free in of_iommu_configure+0xb4/0x4a4
      Read of size 8 at addr ffffff87a2f1acb8 by task kworker/u16:2/153
      
      Workqueue: events_unbound deferred_probe_work_func
      Call trace:
       dump_backtrace+0x0/0x33c
       show_stack+0x18/0x24
       dump_stack_lvl+0x16c/0x1e0
       print_address_description+0x84/0x39c
       __kasan_report+0x184/0x308
       kasan_report+0x50/0x78
       __asan_load8+0xc0/0xc4
       of_iommu_configure+0xb4/0x4a4
       of_dma_configure_id+0x2fc/0x4d4
       platform_dma_configure+0x40/0x5c
       really_probe+0x1b4/0xb74
       driver_probe_device+0x11c/0x228
       __device_attach_driver+0x14c/0x304
       bus_for_each_drv+0x124/0x1b0
       __device_attach+0x25c/0x334
       device_initial_probe+0x24/0x34
       bus_probe_device+0x78/0x134
       deferred_probe_work_func+0x130/0x1a8
       process_one_work+0x4c8/0x970
       worker_thread+0x5c8/0xaec
       kthread+0x1f8/0x220
       ret_from_fork+0x10/0x18
      
      Allocated by task 1:
       ____kasan_kmalloc+0xd4/0x114
       __kasan_kmalloc+0x10/0x1c
       kmem_cache_alloc_trace+0xe4/0x3d4
       __iommu_probe_device+0x90/0x394
       probe_iommu_group+0x70/0x9c
       bus_for_each_dev+0x11c/0x19c
       bus_iommu_probe+0xb8/0x7d4
       bus_set_iommu+0xcc/0x13c
       arm_smmu_bus_init+0x44/0x130 [arm_smmu]
       arm_smmu_device_probe+0xb88/0xc54 [arm_smmu]
       platform_drv_probe+0xe4/0x13c
       really_probe+0x2c8/0xb74
       driver_probe_device+0x11c/0x228
       device_driver_attach+0xf0/0x16c
       __driver_attach+0x80/0x320
       bus_for_each_dev+0x11c/0x19c
       driver_attach+0x38/0x48
       bus_add_driver+0x1dc/0x3a4
       driver_register+0x18c/0x244
       __platform_driver_register+0x88/0x9c
       init_module+0x64/0xff4 [arm_smmu]
       do_one_initcall+0x17c/0x2f0
       do_init_module+0xe8/0x378
       load_module+0x3f80/0x4a40
       __se_sys_finit_module+0x1a0/0x1e4
       __arm64_sys_finit_module+0x44/0x58
       el0_svc_common+0x100/0x264
       do_el0_svc+0x38/0xa4
       el0_svc+0x20/0x30
       el0_sync_handler+0x68/0xac
       el0_sync+0x160/0x180
      
      Freed by task 1:
       kasan_set_track+0x4c/0x84
       kasan_set_free_info+0x28/0x4c
       ____kasan_slab_free+0x120/0x15c
       __kasan_slab_free+0x18/0x28
       slab_free_freelist_hook+0x204/0x2fc
       kfree+0xfc/0x3a4
       __iommu_probe_device+0x284/0x394
       probe_iommu_group+0x70/0x9c
       bus_for_each_dev+0x11c/0x19c
       bus_iommu_probe+0xb8/0x7d4
       bus_set_iommu+0xcc/0x13c
       arm_smmu_bus_init+0x44/0x130 [arm_smmu]
       arm_smmu_device_probe+0xb88/0xc54 [arm_smmu]
       platform_drv_probe+0xe4/0x13c
       really_probe+0x2c8/0xb74
       driver_probe_device+0x11c/0x228
       device_driver_attach+0xf0/0x16c
       __driver_attach+0x80/0x320
       bus_for_each_dev+0x11c/0x19c
       driver_attach+0x38/0x48
       bus_add_driver+0x1dc/0x3a4
       driver_register+0x18c/0x244
       __platform_driver_register+0x88/0x9c
       init_module+0x64/0xff4 [arm_smmu]
       do_one_initcall+0x17c/0x2f0
       do_init_module+0xe8/0x378
       load_module+0x3f80/0x4a40
       __se_sys_finit_module+0x1a0/0x1e4
       __arm64_sys_finit_module+0x44/0x58
       el0_svc_common+0x100/0x264
       do_el0_svc+0x38/0xa4
       el0_svc+0x20/0x30
       el0_sync_handler+0x68/0xac
       el0_sync+0x160/0x180
      
      Fix this by setting dev->iommu to NULL first and
      then freeing dev_iommu structure in dev_iommu_free
      function.
      Suggested-by: NRobin Murphy <robin.murphy@arm.com>
      Signed-off-by: NVijayanand Jitta <quic_vjitta@quicinc.com>
      Link: https://lore.kernel.org/r/1643613155-20215-1-git-send-email-quic_vjitta@quicinc.comSigned-off-by: NJoerg Roedel <jroedel@suse.de>
      b54240ad
  14. 06 12月, 2021 1 次提交
  15. 04 10月, 2021 1 次提交
  16. 28 9月, 2021 1 次提交
  17. 18 8月, 2021 7 次提交
  18. 11 8月, 2021 1 次提交