]> git.proxmox.com Git - qemu.git/commitdiff
vfio-pci: Fix endian issues in vfio_pci_size_rom()
authorAlex Williamson <alex.williamson@redhat.com>
Fri, 4 Oct 2013 18:50:51 +0000 (12:50 -0600)
committerAlex Williamson <alex.williamson@redhat.com>
Fri, 4 Oct 2013 18:50:51 +0000 (12:50 -0600)
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: Alex Williamson <alex.williamson@redhat.com>
Reported-by: Alexey Kardashevskiy <aik@ozlabs.ru>
hw/misc/vfio.c

index 1fbc40b96051917eb95311f6c29aaf44cb93d2ba..a2d5283ff91fe7c82f4d109b10b8d47403156941 100644 (file)
@@ -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;