summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2018-09-16 07:20:21 +0200
committerAlexander Graf <agraf@suse.de>2018-09-23 21:55:30 +0200
commit79276eb2430d02c84a31fc5613e41aba05429184 (patch)
treedeef3a84866c349a04c63fc2051be9e8ce040dff /cmd
parent8887acc68565cad187808db55cd4284385891b87 (diff)
efi_loader: memory leak in efi_set_bootdev()
efi_set_bootdev() may be called repeatedly. Free the memory allocated for device paths in previous calls. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/bootefi.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index d6366c3e26..c8812b0f5e 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -603,6 +603,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;