iommufd/iova_bitmap: Bounds check mapped::pages access
authorJoao Martins <joao.m.martins@oracle.com>
Fri, 2 Feb 2024 13:34:07 +0000 (13:34 +0000)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 6 Feb 2024 15:31:45 +0000 (11:31 -0400)
commita4ab7dedaee0e39b15653c5fd0367e420739f7ef
tree7b695b12063f9f8ec1e64a2be5f7d9b72c32c3b5
parent54be6c6c5ae8e0d93a6c4641cb7528eb0b6ba478
iommufd/iova_bitmap: Bounds check mapped::pages access

Dirty IOMMU hugepages reported on a base page page-size granularity can
lead to an attempt to set dirty pages in the bitmap beyond the limits that
are pinned.

Bounds check the page index of the array we are trying to access is within
the limits before we kmap() and return otherwise.

While it is also a defensive check, this is also in preparation to defer
setting bits (outside the mapped range) to the next iteration(s) when the
pages become available.

Fixes: b058ea3ab5af ("vfio/iova_bitmap: refactor iova_bitmap_set() to better handle page boundaries")
Link: https://lore.kernel.org/r/20240202133415.23819-2-joao.m.martins@oracle.com
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Tested-by: Avihai Horon <avihaih@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/iommufd/iova_bitmap.c