[PATCH v2 1/2] efi_loader: fix dp_fill() for BLKMAP, HOST, VIRTIO

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Wed Jul 19 17:40:45 CEST 2023


Do not assume that the preceding device path contains a single VenHW node.
Instead use the return value of dp_fill() which provides the address of the
next node.

Fixes: 23ad52fff4da ("efi_loader: device_path: support Sandbox's "host" devices")
Fixes: 19ecced71cfb ("efi_loader: device path for virtio block devices")
Fixes: 272ec6b45304 ("efi_loader: device_path: support blkmap devices")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
v2:
	new patch
---
 lib/efi_loader/efi_device_path.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
index 04ebb449ca..c135e2883d 100644
--- a/lib/efi_loader/efi_device_path.c
+++ b/lib/efi_loader/efi_device_path.c
@@ -631,9 +631,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
 			struct efi_device_path_vendor *dp;
 			struct blk_desc *desc = dev_get_uclass_plat(dev);
 
-			dp_fill(buf, dev->parent);
-			dp = buf;
-			++dp;
+			dp = dp_fill(buf, dev->parent);
 			dp->dp.type = DEVICE_PATH_TYPE_HARDWARE_DEVICE;
 			dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_VENDOR;
 			dp->dp.length = sizeof(*dp) + 1;
@@ -649,9 +647,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
 			struct efi_device_path_vendor *dp;
 			struct blk_desc *desc = dev_get_uclass_plat(dev);
 
-			dp_fill(buf, dev->parent);
-			dp = buf;
-			++dp;
+			dp = dp_fill(buf, dev->parent);
 			dp->dp.type = DEVICE_PATH_TYPE_HARDWARE_DEVICE;
 			dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_VENDOR;
 			dp->dp.length = sizeof(*dp) + 1;
@@ -666,9 +662,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
 			struct efi_device_path_vendor *dp;
 			struct blk_desc *desc = dev_get_uclass_plat(dev);
 
-			dp_fill(buf, dev->parent);
-			dp = buf;
-			++dp;
+			dp = dp_fill(buf, dev->parent);
 			dp->dp.type = DEVICE_PATH_TYPE_HARDWARE_DEVICE;
 			dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_VENDOR;
 			dp->dp.length = sizeof(*dp) + 1;
-- 
2.40.1



More information about the U-Boot mailing list