Message ID | 20250205231728.2527186-2-alex.williamson@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | vfio: Improve DMA mapping performance for huge pfnmaps | expand |
Reviewed-by: "Mitchell Augustin" <mitchell.augustin@canonical.com> Tested-by: "Mitchell Augustin" <mitchell.augustin@canonical.com> On Wed, Feb 5, 2025 at 5:18 PM Alex Williamson <alex.williamson@redhat.com> wrote: > > pin_user_pages_remote() can currently return zero for invalid args > or zero nr_pages, neither of which should ever happen. However > vaddr_get_pfns() indicates it should only ever return a positive > value or -errno and there's a theoretical case where this can slip > through and be unhandled by callers. Therefore convert zero to > -EFAULT. > > Signed-off-by: Alex Williamson <alex.williamson@redhat.com> > --- > drivers/vfio/vfio_iommu_type1.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c > index 50ebc9593c9d..119cf886d8c0 100644 > --- a/drivers/vfio/vfio_iommu_type1.c > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -564,6 +564,8 @@ static int vaddr_get_pfns(struct mm_struct *mm, unsigned long vaddr, > if (ret > 0) { > *pfn = page_to_pfn(pages[0]); > goto done; > + } else if (!ret) { > + ret = -EFAULT; > } > > vaddr = untagged_addr_remote(mm, vaddr); > -- > 2.47.1 > -- Mitchell Augustin Software Engineer - Ubuntu Partner Engineering
On Wed, Feb 05, 2025 at 04:17:17PM -0700, Alex Williamson wrote: > pin_user_pages_remote() can currently return zero for invalid args It is so weird that it still does that, I tried to get rid of most of those but didn't dare touch that.. Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Jason
diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index 50ebc9593c9d..119cf886d8c0 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -564,6 +564,8 @@ static int vaddr_get_pfns(struct mm_struct *mm, unsigned long vaddr, if (ret > 0) { *pfn = page_to_pfn(pages[0]); goto done; + } else if (!ret) { + ret = -EFAULT; } vaddr = untagged_addr_remote(mm, vaddr);
pin_user_pages_remote() can currently return zero for invalid args or zero nr_pages, neither of which should ever happen. However vaddr_get_pfns() indicates it should only ever return a positive value or -errno and there's a theoretical case where this can slip through and be unhandled by callers. Therefore convert zero to -EFAULT. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> --- drivers/vfio/vfio_iommu_type1.c | 2 ++ 1 file changed, 2 insertions(+)