vfio: fix truncated BAR offset for 32-bit
authorMichal Krawczyk <mk@semihalf.com>
Thu, 24 Oct 2019 12:10:46 +0000 (14:10 +0200)
committerDavid Marchand <david.marchand@redhat.com>
Sat, 26 Oct 2019 15:30:17 +0000 (17:30 +0200)
commit8108393d982b805ee4911c0d5cdfed53acec5d36
tree05433efbf08e0b94c9ddfd69cc91b87df1890d84
parent7e708cd8c687aa99098833e50c6b23023b987a31
vfio: fix truncated BAR offset for 32-bit

When 32-bit application is built on 64-bit system it is possible that
the offset of the resource is outside of the 32-bit value.

The problem with the unsigned long is, that it is 32-bit and not 64-bit
when using armhf compiler. Although the system is returning u64 value,
we are losing it's value if it's higher than 32-bit in the conversion
process. It can further cause mmap to fail due to offset being 0 or to
map not intended memory region.

To make it more portable, the uint64_t value is now being used for
storing offset instead of unsigned long. The size of being 32-bit seems
to be fine as the 32-bit application won't be able to access bigger
memory and it is further converted to size_t anyway. But for better
readability and to be consistent, it's type was changed to size_t as
well.

Fixes: 0205f873557c ("vfio: fix overflow of BAR region offset and size")
Cc: stable@dpdk.org
Signed-off-by: Michal Krawczyk <mk@semihalf.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
drivers/bus/pci/linux/pci_vfio.c