diff mbox series

[v7,2/4] Fix incorrect return code of boot option update

Message ID 20230531174515.41758-3-raymond.mao@linaro.org
State Superseded
Delegated to: Heinrich Schuchardt
Headers show
Series Boot variables management for removable media | expand

Commit Message

Raymond Mao May 31, 2023, 5:45 p.m. UTC
Correct the return code for out-of-memory and no boot option found

Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
---
Changes in v7
- new patch file created

 cmd/bootmenu.c               | 2 +-
 cmd/eficonfig.c              | 2 +-
 lib/efi_loader/efi_bootmgr.c | 8 ++++++--
 3 files changed, 8 insertions(+), 4 deletions(-)

Comments

Ilias Apalodimas June 6, 2023, 1:36 p.m. UTC | #1
On Wed, May 31, 2023 at 10:45:15AM -0700, Raymond Mao wrote:
> Correct the return code for out-of-memory and no boot option found
>
> Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
> ---
> Changes in v7
> - new patch file created
>
>  cmd/bootmenu.c               | 2 +-
>  cmd/eficonfig.c              | 2 +-
>  lib/efi_loader/efi_bootmgr.c | 8 ++++++--
>  3 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c
> index 01daddca7b..987b16889f 100644
> --- a/cmd/bootmenu.c
> +++ b/cmd/bootmenu.c
> @@ -352,7 +352,7 @@ static struct bootmenu_data *bootmenu_create(int delay)
>  		 * a architecture-specific default image name such as BOOTAA64.EFI.
>  		 */
>  		efi_ret = efi_bootmgr_update_media_device_boot_option();
> -		if (efi_ret != EFI_SUCCESS && efi_ret != EFI_NOT_FOUND)
> +		if (efi_ret != EFI_SUCCESS)
>  			goto cleanup;
>
>  		ret = prepare_uefi_bootorder_entry(menu, &iter, &i);
> diff --git a/cmd/eficonfig.c b/cmd/eficonfig.c
> index 82a80306f4..e6e8a0a488 100644
> --- a/cmd/eficonfig.c
> +++ b/cmd/eficonfig.c
> @@ -2314,7 +2314,7 @@ static int do_eficonfig(struct cmd_tbl *cmdtp, int flag, int argc, char *const a
>  		return CMD_RET_FAILURE;
>
>  	ret = efi_bootmgr_update_media_device_boot_option();
> -	if (ret != EFI_SUCCESS && ret != EFI_NOT_FOUND)
> +	if (ret != EFI_SUCCESS)
>  		return ret;
>
>  	while (1) {
> diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
> index 48cd5f0636..95559ad6dd 100644
> --- a/lib/efi_loader/efi_bootmgr.c
> +++ b/lib/efi_loader/efi_bootmgr.c
> @@ -663,11 +663,13 @@ efi_status_t efi_bootmgr_update_media_device_boot_option(void)
>  					   NULL, &count,
>  					   (efi_handle_t **)&volume_handles);
>  	if (ret != EFI_SUCCESS)
> -		return ret;
> +		goto out;
>
>  	opt = calloc(count, sizeof(struct eficonfig_media_boot_option));
> -	if (!opt)
> +	if (!opt) {
> +		ret = EFI_OUT_OF_RESOURCES;
>  		goto out;
> +	}
>
>  	/* enumerate all devices supporting EFI_SIMPLE_FILE_SYSTEM_PROTOCOL */
>  	ret = efi_bootmgr_enumerate_boot_option(opt, volume_handles, count);
> @@ -720,5 +722,7 @@ out:
>  	free(opt);
>  	efi_free_pool(volume_handles);
>
> +	if (ret == EFI_NOT_FOUND)
> +		return EFI_SUCCESS;
>  	return ret;
>  }
> --
> 2.25.1
>

Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
diff mbox series

Patch

diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c
index 01daddca7b..987b16889f 100644
--- a/cmd/bootmenu.c
+++ b/cmd/bootmenu.c
@@ -352,7 +352,7 @@  static struct bootmenu_data *bootmenu_create(int delay)
 		 * a architecture-specific default image name such as BOOTAA64.EFI.
 		 */
 		efi_ret = efi_bootmgr_update_media_device_boot_option();
-		if (efi_ret != EFI_SUCCESS && efi_ret != EFI_NOT_FOUND)
+		if (efi_ret != EFI_SUCCESS)
 			goto cleanup;
 
 		ret = prepare_uefi_bootorder_entry(menu, &iter, &i);
diff --git a/cmd/eficonfig.c b/cmd/eficonfig.c
index 82a80306f4..e6e8a0a488 100644
--- a/cmd/eficonfig.c
+++ b/cmd/eficonfig.c
@@ -2314,7 +2314,7 @@  static int do_eficonfig(struct cmd_tbl *cmdtp, int flag, int argc, char *const a
 		return CMD_RET_FAILURE;
 
 	ret = efi_bootmgr_update_media_device_boot_option();
-	if (ret != EFI_SUCCESS && ret != EFI_NOT_FOUND)
+	if (ret != EFI_SUCCESS)
 		return ret;
 
 	while (1) {
diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
index 48cd5f0636..95559ad6dd 100644
--- a/lib/efi_loader/efi_bootmgr.c
+++ b/lib/efi_loader/efi_bootmgr.c
@@ -663,11 +663,13 @@  efi_status_t efi_bootmgr_update_media_device_boot_option(void)
 					   NULL, &count,
 					   (efi_handle_t **)&volume_handles);
 	if (ret != EFI_SUCCESS)
-		return ret;
+		goto out;
 
 	opt = calloc(count, sizeof(struct eficonfig_media_boot_option));
-	if (!opt)
+	if (!opt) {
+		ret = EFI_OUT_OF_RESOURCES;
 		goto out;
+	}
 
 	/* enumerate all devices supporting EFI_SIMPLE_FILE_SYSTEM_PROTOCOL */
 	ret = efi_bootmgr_enumerate_boot_option(opt, volume_handles, count);
@@ -720,5 +722,7 @@  out:
 	free(opt);
 	efi_free_pool(volume_handles);
 
+	if (ret == EFI_NOT_FOUND)
+		return EFI_SUCCESS;
 	return ret;
 }