On Thu, Aug 22, 2024 at 11:45:54AM -0300, Jason Gunthorpe wrote: > 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@xxxxxxxxxx > Fixes: aad37e71d5c4 ("iommufd: IOCTLs for the io_pagetable") > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Reviewed-by: Nicolin Chen <nicolinc@xxxxxxxxxx> I also tried both patches with io-pgtable-arm and didn't see any issue, since they tends to fix a corner case I think. Nicolin