aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenyu Wang <[email protected]>2021-11-25 13:13:28 +0800
committerAlex Williamson <[email protected]>2021-11-30 11:41:49 -0700
commit8704e89349080bd640d1755c46d8cdc359a89748 (patch)
treeb7c3d73fb4d2b2765f0088f0d58816675edd11d3
parent3b9a2d57930372fac8cc0291ed5cdbd443542ed6 (diff)
vfio/pci: Fix OpRegion read
This is to fix incorrect pointer arithmetic which caused wrong OpRegion version returned, then VM driver got error to get wanted VBT block. We need to be safe to return correct data, so force pointer type for byte access. Fixes: 49ba1a2976c8 ("vfio/pci: Add OpRegion 2.0+ Extended VBT support.") Cc: Colin Xu <[email protected]> Cc: Alex Williamson <[email protected]> Cc: Dmitry Torokhov <[email protected]> Cc: "Xu, Terrence" <[email protected]> Cc: "Gao, Fred" <[email protected]> Acked-by: Colin Xu <[email protected]> Signed-off-by: Zhenyu Wang <[email protected]> Link: https://lore.kernel.org/r/[email protected] [aw: line wrap] Signed-off-by: Alex Williamson <[email protected]>
-rw-r--r--drivers/vfio/pci/vfio_pci_igd.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c
index 56cd551e0e04..362f91ec8845 100644
--- a/drivers/vfio/pci/vfio_pci_igd.c
+++ b/drivers/vfio/pci/vfio_pci_igd.c
@@ -98,7 +98,8 @@ static ssize_t vfio_pci_igd_rw(struct vfio_pci_core_device *vdev,
version = cpu_to_le16(0x0201);
if (igd_opregion_shift_copy(buf, &off,
- &version + (pos - OPREGION_VERSION),
+ (u8 *)&version +
+ (pos - OPREGION_VERSION),
&pos, &remaining, bytes))
return -EFAULT;
}
@@ -121,7 +122,7 @@ static ssize_t vfio_pci_igd_rw(struct vfio_pci_core_device *vdev,
OPREGION_SIZE : 0);
if (igd_opregion_shift_copy(buf, &off,
- &rvda + (pos - OPREGION_RVDA),
+ (u8 *)&rvda + (pos - OPREGION_RVDA),
&pos, &remaining, bytes))
return -EFAULT;
}