[dpdk-stable] patch 'vfio: fix truncated BAR offset for 32-bit' has been queued to LTS release 18.11.6

Kevin Traynor ktraynor at redhat.com
Tue Dec 10 15:58:55 CET 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/16/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/620f94f6c161101afc2b826af09185fc34f19ade

Thanks.

Kevin.

---
>From 620f94f6c161101afc2b826af09185fc34f19ade Mon Sep 17 00:00:00 2001
From: Michal Krawczyk <mk at semihalf.com>
Date: Thu, 24 Oct 2019 14:10:46 +0200
Subject: [PATCH] vfio: fix truncated BAR offset for 32-bit

[ upstream commit 8108393d982b805ee4911c0d5cdfed53acec5d36 ]

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")

Signed-off-by: Michal Krawczyk <mk at semihalf.com>
Acked-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
 drivers/bus/pci/linux/pci_vfio.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c
index 8e3d43e9c..a3635cfe1 100644
--- a/drivers/bus/pci/linux/pci_vfio.c
+++ b/drivers/bus/pci/linux/pci_vfio.c
@@ -452,5 +452,6 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
 {
 	struct memreg {
-		unsigned long offset, size;
+		uint64_t offset;
+		size_t   size;
 	} memreg[2] = {};
 	void *bar_addr;
@@ -488,5 +489,6 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
 			"Trying to map BAR%d that contains the MSI-X "
 			"table. Trying offsets: "
-			"0x%04lx:0x%04lx, 0x%04lx:0x%04lx\n", bar_index,
+			"0x%04" PRIx64 ":0x%04zx, 0x%04" PRIx64 ":0x%04zx\n",
+			bar_index,
 			memreg[0].offset, memreg[0].size,
 			memreg[1].offset, memreg[1].size);
@@ -513,6 +515,6 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
 			&& memreg[1].offset && memreg[1].size) {
 			void *second_addr = RTE_PTR_ADD(bar_addr,
-							memreg[1].offset -
-							(uintptr_t)bar->offset);
+						(uintptr_t)(memreg[1].offset -
+						bar->offset));
 			map_addr = pci_map_resource(second_addr,
 							vfio_dev_fd,
-- 
2.21.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-12-10 14:49:40.491384387 +0000
+++ 0021-vfio-fix-truncated-BAR-offset-for-32-bit.patch	2019-12-10 14:49:39.014458476 +0000
@@ -1 +1 @@
-From 8108393d982b805ee4911c0d5cdfed53acec5d36 Mon Sep 17 00:00:00 2001
+From 620f94f6c161101afc2b826af09185fc34f19ade Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8108393d982b805ee4911c0d5cdfed53acec5d36 ]
+
@@ -23 +24,0 @@
-Cc: stable at dpdk.org
@@ -32 +33 @@
-index faf2990a7..b8faa23f8 100644
+index 8e3d43e9c..a3635cfe1 100644
@@ -43 +44 @@
-@@ -505,5 +506,6 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
+@@ -488,5 +489,6 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
@@ -51 +52 @@
-@@ -530,6 +532,6 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,
+@@ -513,6 +515,6 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,



More information about the stable mailing list