Don't try to configure a BAR if there is no region associated with it. Signed-off-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> --- vfio/pci.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vfio/pci.c b/vfio/pci.c index 1f38f90c3ae9..f86a7d9b7032 100644 --- a/vfio/pci.c +++ b/vfio/pci.c @@ -652,6 +652,8 @@ static int vfio_pci_fixup_cfg_space(struct vfio_device *vdev) /* Initialise the BARs */ for (i = VFIO_PCI_BAR0_REGION_INDEX; i <= VFIO_PCI_BAR5_REGION_INDEX; ++i) { + if ((u32)i == vdev->info.num_regions) + break; u64 base; struct vfio_region *region = &vdev->regions[i]; @@ -853,11 +855,12 @@ static int vfio_pci_configure_bar(struct kvm *kvm, struct vfio_device *vdev, u32 bar; size_t map_size; struct vfio_pci_device *pdev = &vdev->pci; - struct vfio_region *region = &vdev->regions[nr]; + struct vfio_region *region; if (nr >= vdev->info.num_regions) return 0; + region = &vdev->regions[nr]; bar = pdev->hdr.bar[nr]; region->vdev = vdev; -- 2.20.1