]> www.infradead.org Git - users/jedix/linux-maple.git/commit
iommufd: Do not allow creating areas without READ or WRITE
authorJason Gunthorpe <jgg@nvidia.com>
Thu, 22 Aug 2024 14:45:54 +0000 (11:45 -0300)
committerJoerg Roedel <jroedel@suse.de>
Mon, 26 Aug 2024 07:16:13 +0000 (09:16 +0200)
commit996dc53ac289b81957aa70d62ccadc6986d26a87
tree91ddee2e048995354102810341a414b04b1b3039
parent7af6c720417f21f015f46baa33e182f349ddc93b
iommufd: Do not allow creating areas without READ or WRITE

This results in passing 0 or just IOMMU_CACHE to iommu_map(). Most of
the page table formats don't like this:

  amdv1 - -EINVAL
  armv7s - returns 0, doesn't update mapped
  arm-lpae - returns 0 doesn't update mapped
  dart - returns 0, doesn't update mapped
  VT-D - returns -EINVAL

Unfortunately the three formats that return 0 cause serious problems:

 - Returning ret = but not uppdating mapped from domain->map_pages()
   causes an infinite loop in __iommu_map()

 - Not writing ioptes means that VFIO/iommufd have no way to recover them
   and we will have memory leaks and worse during unmap

Since almost nothing can support this, and it is a useless thing to do,
block it early in iommufd.

Cc: stable@kernel.org
Fixes: aad37e71d5c4 ("iommufd: IOCTLs for the io_pagetable")
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/1-v1-1211e1294c27+4b1-iommu_no_prot_jgg@nvidia.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/iommufd/ioas.c
tools/testing/selftests/iommu/iommufd.c