]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
efi_loader: efi_var_sf: Do not fail on blank SPI Flash
authorMichal Simek <michal.simek@amd.com>
Thu, 19 Mar 2026 07:15:07 +0000 (08:15 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Fri, 17 Apr 2026 05:40:17 +0000 (07:40 +0200)
When SPI Flash is blank (first boot or erased), efi_var_from_storage()
returns EFI_DEVICE_ERROR because efi_var_restore() fails on invalid
magic/CRC. This prevents the EFI subsystem from initializing.

Check the magic value before attempting to restore variables. If
the magic does not match EFI_VAR_FILE_MAGIC, treat it as an empty
store and return EFI_SUCCESS, matching the behavior of the file-based
efi_var_file.c which deliberately returns EFI_SUCCESS on missing or
corrupted variable files to avoid blocking the boot process.

Similarly, if the magic matches but efi_var_restore() fails (e.g.
corrupted CRC), log the error but still return EFI_SUCCESS.

Suggested-by: John Toomey <john.toomey@amd.com>
Signed-off-by: Michal Simek <michal.simek@amd.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
lib/efi_loader/efi_var_sf.c

index 6eae8d46464532f780f483a02011e5080cac4e00..b84ec8e67dce0f586fa5a2ae87e3d5e0d08941b0 100644 (file)
@@ -98,11 +98,8 @@ efi_status_t efi_var_from_storage(void)
                goto error;
        }
 
-       if (efi_var_restore(buf, false) != EFI_SUCCESS) {
+       if (efi_var_restore(buf, false) != EFI_SUCCESS)
                log_err("No valid EFI variables in SPI Flash\n");
-               ret = EFI_DEVICE_ERROR;
-               goto error;
-       }
 
        ret = EFI_SUCCESS;
 error: