aboutsummaryrefslogtreecommitdiff
path: root/lib/efi_loader/efi_device_path.c
diff options
context:
space:
mode:
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2023-07-19 16:49:46 +0200
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2023-07-20 09:12:50 +0200
commitdc7a2f1d9fcd642ba8c2a6d544244c7852c5f6ec (patch)
treed3dff0460d141ced1fcc439e5b811f0a392761b5 /lib/efi_loader/efi_device_path.c
parent4f399f277cd0116944642ea7246795678fcb495f (diff)
downloadu-boot-dc7a2f1d9fcd642ba8c2a6d544244c7852c5f6ec.zip
u-boot-dc7a2f1d9fcd642ba8c2a6d544244c7852c5f6ec.tar.gz
u-boot-dc7a2f1d9fcd642ba8c2a6d544244c7852c5f6ec.tar.bz2
efi_loader: fix dp_fill() for BLKMAP, HOST, VIRTIO
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@canonical.com>
Diffstat (limited to 'lib/efi_loader/efi_device_path.c')
-rw-r--r--lib/efi_loader/efi_device_path.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
index 04ebb44..c135e28 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;