Re: [PATCH] vfio/pci: Don't export DMABUFs for unmappable BARs

Leon Romanovsky
2026-04-15T18:24:04Z

On Wed, Apr 15, 2026 at 11:16:23AM -0700, Matt Evans wrote:
> Although vfio_pci_core_feature_dma_buf() validates that both requested
> DMABUF ranges and the PCI resources being referenced are page-aligned,
> there may be reasons other than alignment that cause a BAR to be
> unmappable.
>
> Add a check for vdev->bar_mmap_supported[index], similar to the VFIO
> mmap path.
>
> Fixes: 5d74781ebc86c ("vfio/pci: Add dma-buf export support for MMIO regions")
> Signed-off-by: Matt Evans <mattev@meta.com>
> ---
> drivers/vfio/pci/vfio_pci_dmabuf.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/vfio/pci/vfio_pci_dmabuf.c b/drivers/vfio/pci/vfio_pci_dmabuf.c
> index f87fd32e4a01..4ccaf3531e02 100644
> --- a/drivers/vfio/pci/vfio_pci_dmabuf.c
> +++ b/drivers/vfio/pci/vfio_pci_dmabuf.c
> @@ -249,6 +249,9 @@ int vfio_pci_core_feature_dma_buf(struct vfio_pci_core_device *vdev, u32 flags,
> if (get_dma_buf.region_index >= VFIO_PCI_ROM_REGION_INDEX)
> return -ENODEV;
>
> + if (!vdev->bar_mmap_supported[get_dma_buf.region_index])
> + return -EINVAL;

I noticed this check in vfio_pci_core_mmap(). Isn't that sufficient?

Thanks

> +
> dma_ranges = memdup_array_user(&arg->dma_ranges, get_dma_buf.nr_ranges,
> sizeof(*dma_ranges));
> if (IS_ERR(dma_ranges))
> --
> 2.47.3
>