efi_set_bootdev() may be called repeatedly.
Free the memory allocated for device paths in previous calls.

Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
---
 cmd/bootefi.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 791db359f5..a890f414e8 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -630,6 +630,13 @@ void efi_set_bootdev(const char *dev, const char *devnr, 
const char *path)
        char filename[32] = { 0 }; /* dp->str is u16[32] long */
        char *s;
 
+       /* efi_set_bootdev is typically called repeatedly, recover memory */
+       efi_free_pool(bootefi_device_path);
+       efi_free_pool(bootefi_image_path);
+       /* If blk_get_device_part_str fails, avoid duplicate free. */
+       bootefi_device_path = NULL;
+       bootefi_image_path = NULL;
+
        if (strcmp(dev, "Net")) {
                struct blk_desc *desc;
                disk_partition_t fs_partition;
-- 
2.18.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to