From dc7a2f1d9fcd642ba8c2a6d544244c7852c5f6ec Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Wed, 19 Jul 2023 16:49:46 +0200 Subject: [PATCH] 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 --- 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;