Commit b1c50c5f authored by Alex Williamson's avatar Alex Williamson
Browse files

vfio-pci: Fix endian issues in vfio_pci_size_rom()



VFIO is always little endian so do byte swapping of our mask on the
way in and byte swapping of the size on the way out.

Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Reported-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
parent 64fa25a0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1141,7 +1141,7 @@ static const MemoryRegionOps vfio_rom_ops = {

static void vfio_pci_size_rom(VFIODevice *vdev)
{
    uint32_t orig, size = (uint32_t)PCI_ROM_ADDRESS_MASK;
    uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK);
    off_t offset = vdev->config_offset + PCI_ROM_ADDRESS;
    char name[32];

@@ -1163,7 +1163,7 @@ static void vfio_pci_size_rom(VFIODevice *vdev)
        return;
    }

    size = ~(size & PCI_ROM_ADDRESS_MASK) + 1;
    size = ~(le32_to_cpu(size) & PCI_ROM_ADDRESS_MASK) + 1;

    if (!size) {
        return;