Skip to content

Commit

Permalink
vfio-pci: Fix BAR size overflow
Browse files Browse the repository at this point in the history
We use an unsigned int when working with the PCI BAR size, which can
obviously overflow if the BAR is 4GB or larger.  This needs to change
to a fixed length uint64_t.  A similar issue is possible, though even
more unlikely, when mapping the region above an MSI-X table.  The
start of the MSI-X vector table must be below 4GB, but the end, and
therefore the start of the next mapping region, could still land at
4GB.

Suggested-by: Nishank Trivedi <[email protected]>
Signed-off-by: Alex Williamson <[email protected]>
Reviewed-by: Don Slutz <[email protected]>
Tested-by: Alexey Kardashevskiy <[email protected]>
  • Loading branch information
awilliam committed Jan 9, 2015
1 parent 59a0419 commit 29c6e6d
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions hw/vfio/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -2301,7 +2301,7 @@ static void vfio_unmap_bar(VFIOPCIDevice *vdev, int nr)
static void vfio_map_bar(VFIOPCIDevice *vdev, int nr)
{
VFIOBAR *bar = &vdev->bars[nr];
unsigned size = bar->region.size;
uint64_t size = bar->region.size;
char name[64];
uint32_t pci_bar;
uint8_t type;
Expand Down Expand Up @@ -2351,7 +2351,7 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr)
}

if (vdev->msix && vdev->msix->table_bar == nr) {
unsigned start;
uint64_t start;

start = HOST_PAGE_ALIGN(vdev->msix->table_offset +
(vdev->msix->entries * PCI_MSIX_ENTRY_SIZE));
Expand Down

0 comments on commit 29c6e6d

Please sign in to comment.