android_kernel_samsung_sm8650/drivers/dma/idxd
Fenghua Yu 0ec8ce0739 dmaengine: idxd: Do not enable user type Work Queue without Shared Virtual Addressing
When the idxd_user_drv driver is bound to a Work Queue (WQ) device
without IOMMU or with IOMMU Passthrough without Shared Virtual
Addressing (SVA), the application gains direct access to physical
memory via the device by programming physical address to a submitted
descriptor. This allows direct userspace read and write access to
arbitrary physical memory. This is inconsistent with the security
goals of a good kernel API.

Unlike vfio_pci driver, the IDXD char device driver does not provide any
ways to pin user pages and translate the address from user VA to IOVA or
PA without IOMMU SVA. Therefore the application has no way to instruct the
device to perform DMA function. This makes the char device not usable for
normal application usage.

Since user type WQ without SVA cannot be used for normal application usage
and presents the security issue, bind idxd_user_drv driver and enable user
type WQ only when SVA is enabled (i.e. user PASID is enabled).

Fixes: 448c3de8ac ("dmaengine: idxd: create user driver for wq 'device'")
Cc: stable@vger.kernel.org
Suggested-by: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
Link: https://lore.kernel.org/r/20221014222541.3912195-1-fenghua.yu@intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2022-10-19 19:02:10 +05:30
..
bus.c Bus: Make remove callback return void tag 2021-07-27 19:12:14 +05:30
cdev.c dmaengine: idxd: Do not enable user type Work Queue without Shared Virtual Addressing 2022-10-19 19:02:10 +05:30
compat.c dmaengine: idxd: Fix a possible NULL pointer dereference 2021-08-02 12:35:10 +05:30
device.c dmaengine: idxd: add configuration for concurrent batch descriptor processing 2022-09-29 22:46:08 +05:30
dma.c dmaengine: idxd: add missing callback function to support DMA_INTERRUPT 2022-05-16 23:18:21 +05:30
idxd.h dmaengine: idxd: add configuration for concurrent batch descriptor processing 2022-09-29 22:46:08 +05:30
init.c dmaengine: idxd: add WQ operation cap restriction support 2022-09-29 22:46:08 +05:30
irq.c dmaengine: idxd: Remove unused struct idxd_fault 2022-09-29 13:11:33 +05:30
Makefile dmaengine: idxd: move dsa_drv support to compatible mode 2021-07-21 10:09:16 +05:30
perfmon.c dmaengine: idxd: Add IDXD performance monitor support 2021-04-25 21:46:12 +05:30
perfmon.h dmaengine: idxd: Add IDXD performance monitor support 2021-04-25 21:46:12 +05:30
registers.h dmaengine: idxd: add configuration for concurrent batch descriptor processing 2022-09-29 22:46:08 +05:30
submit.c dmaengine: idxd: fix retry value to be constant for duration of function call 2022-04-20 17:24:42 +05:30
sysfs.c dmaengine: idxd: add configuration for concurrent batch descriptor processing 2022-09-29 22:46:08 +05:30