]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
EFI: Do not consider OsIndications variable if CONFIG_EFI_IGNORE_OSINDICATIONS is...
authorSughosh Ganu <sughosh.ganu@linaro.org>
Wed, 1 Jun 2022 18:00:39 +0000 (23:30 +0530)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 12 Jun 2022 07:17:54 +0000 (09:17 +0200)
The EFI_IGNORE_OSINDICATIONS config symbol was introduced as a
mechanism to have capsule updates work even on platforms where the
SetVariable runtime service was not supported. The current logic
requires the OsIndications variable to have been set to a 64 bit value
even when the EFI_IGNORE_OSINDICATIONS config is enabled. Return an
error code on not being able to read the variable only when
EFI_IGNORE_OSINDICATIONS is not enabled.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
lib/efi_loader/efi_capsule.c

index c76a5f3570c848c17d08e84d45ace0a31552bf13..a6b98f066a0babb844797e7afd070490e7662711 100644 (file)
@@ -1058,14 +1058,15 @@ static void efi_capsule_scan_done(void)
  */
 static efi_status_t check_run_capsules(void)
 {
-       u64 os_indications;
+       u64 os_indications = 0x0;
        efi_uintn_t size;
        efi_status_t r;
 
        size = sizeof(os_indications);
        r = efi_get_variable_int(u"OsIndications", &efi_global_variable_guid,
                                 NULL, &size, &os_indications, NULL);
-       if (r != EFI_SUCCESS || size != sizeof(os_indications))
+       if (!IS_ENABLED(CONFIG_EFI_IGNORE_OSINDICATIONS) &&
+           (r != EFI_SUCCESS || size != sizeof(os_indications)))
                return EFI_NOT_FOUND;
 
        if (os_indications &
@@ -1084,7 +1085,7 @@ static efi_status_t check_run_capsules(void)
                return EFI_SUCCESS;
        } else if (IS_ENABLED(CONFIG_EFI_IGNORE_OSINDICATIONS)) {
                return EFI_SUCCESS;
-       } else  {
+       } else {
                return EFI_NOT_FOUND;
        }
 }