diff options
author | Heinrich Schuchardt <heinrich.schuchardt@canonical.com> | 2023-07-30 14:03:53 +0200 |
---|---|---|
committer | Heinrich Schuchardt <heinrich.schuchardt@canonical.com> | 2023-08-03 09:21:03 +0200 |
commit | cff7700170c2eb9d8059acbc2a5664ee9c8a8a9b (patch) | |
tree | 816c770d332a8dbbd9bbe32691253df2f839eedd /lib/efi_loader/efi_disk.c | |
parent | ecae4bbf35fac3cde0c41c012a05c8e5b4ade90f (diff) |
efi_loader: error handling in efi_disk_add_dev
* If an error occurs in efi_disk_add_dev(), don't leak resources.
* If calloc() fails while creating the file system protocol interface,
signal an error.
* Rename efi_simple_file_system() to efi_create_simple_file_system().
* Drop a little helpful debug message.
Fixes: 2a92080d8c44 ("efi_loader: add file/filesys support")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Diffstat (limited to 'lib/efi_loader/efi_disk.c')
-rw-r--r-- | lib/efi_loader/efi_disk.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index 46cb5704a72..f0d76113b00 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -487,15 +487,16 @@ static efi_status_t efi_disk_add_dev( */ if ((part || desc->part_type == PART_TYPE_UNKNOWN) && efi_fs_exists(desc, part)) { - diskobj->volume = efi_simple_file_system(desc, part, - diskobj->dp); + ret = efi_create_simple_file_system(desc, part, diskobj->dp, + &diskobj->volume); + if (ret != EFI_SUCCESS) + goto error; + ret = efi_add_protocol(&diskobj->header, &efi_simple_file_system_protocol_guid, diskobj->volume); - if (ret != EFI_SUCCESS) { - log_debug("simple FS failed\n"); - return ret; - } + if (ret != EFI_SUCCESS) + goto error; } diskobj->ops = block_io_disk_template; diskobj->dev_index = dev_index; @@ -538,6 +539,8 @@ static efi_status_t efi_disk_add_dev( return EFI_SUCCESS; error: efi_delete_handle(&diskobj->header); + free(diskobj->volume); + free(diskobj); return ret; } |