From: Daan De Meyer Date: Sun, 31 Jan 2021 10:56:21 +0000 (+0000) Subject: boot: Add efivar_get_boolean_u8() X-Git-Tag: v248-rc1~220^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2a7c16753bcebbe149ec20477a6fff66e8f7a1b4;p=thirdparty%2Fsystemd.git boot: Add efivar_get_boolean_u8() --- diff --git a/src/boot/efi/secure-boot.c b/src/boot/efi/secure-boot.c index 07d6252e27b..cacf3b6a7b8 100644 --- a/src/boot/efi/secure-boot.c +++ b/src/boot/efi/secure-boot.c @@ -4,11 +4,10 @@ #include "util.h" BOOLEAN secure_boot_enabled(void) { - _cleanup_freepool_ CHAR8 *b = NULL; - UINTN size; + BOOLEAN secure; + EFI_STATUS err; - if (efivar_get_raw(EFI_GLOBAL_GUID, L"SecureBoot", &b, &size) == EFI_SUCCESS) - return *b > 0; + err = efivar_get_boolean_u8(EFI_GLOBAL_GUID, L"SecureBoot", &secure); - return FALSE; + return !EFI_ERROR(err) && secure; } diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index c795bd6dbc4..9019cd7a252 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -166,6 +166,18 @@ EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const CHAR16 *name, CHAR8 **bu return err; } +EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const CHAR16 *name, BOOLEAN *ret) { + _cleanup_freepool_ CHAR8 *b = NULL; + UINTN size; + EFI_STATUS err; + + err = efivar_get_raw(vendor, name, &b, &size); + if (!EFI_ERROR(err)) + *ret = *b > 0; + + return err; +} + VOID efivar_set_time_usec(const EFI_GUID *vendor, CHAR16 *name, UINT64 usec) { CHAR16 str[32]; diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h index 92c3a0a5848..07882383d4d 100644 --- a/src/boot/efi/util.h +++ b/src/boot/efi/util.h @@ -29,6 +29,7 @@ VOID efivar_set_time_usec(const EFI_GUID *vendor, CHAR16 *name, UINT64 usec); EFI_STATUS efivar_get(const EFI_GUID *vendor, const CHAR16 *name, CHAR16 **value); EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const CHAR16 *name, CHAR8 **buffer, UINTN *size); EFI_STATUS efivar_get_int(const EFI_GUID *vendor, const CHAR16 *name, UINTN *i); +EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const CHAR16 *name, BOOLEAN *ret); CHAR8 *strchra(CHAR8 *s, CHAR8 c); CHAR16 *stra_to_path(CHAR8 *stra);