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 --- 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; + dma_ranges = memdup_array_user(&arg->dma_ranges, get_dma_buf.nr_ranges, sizeof(*dma_ranges)); if (IS_ERR(dma_ranges)) -- 2.47.3