From 31e1edf570dcc8b4bce5adae57fc8965673271bf Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 2 Jul 2024 18:09:55 +0200 Subject: [PATCH] =?utf8?q?efivars:=20rename=20efivar=5Fget=5Fuint=5Fstring?= =?utf8?q?()=20=E2=86=92=20efivar=5Fget=5Fuint64=5Fstr16()?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Be explicit with the type, and more inline with our other code, that likes to indicate the string char width in the name. Also, switch to a fixed size type, since EFI variables should really be binary exact the same on all archs. --- src/boot/efi/boot.c | 15 ++++++++------- src/boot/efi/efivars.c | 12 ++++++------ src/boot/efi/efivars.h | 4 ++-- src/boot/efi/stub.c | 8 ++++---- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index 60aa6e9b85d..b3d9329926a 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -1111,8 +1111,8 @@ static bool menu_run( if (config->console_mode_efivar == CONSOLE_MODE_KEEP) efivar_unset(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode", EFI_VARIABLE_NON_VOLATILE); else - efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode", - config->console_mode_efivar, EFI_VARIABLE_NON_VOLATILE); + efivar_set_uint64_str16(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode", + config->console_mode_efivar, EFI_VARIABLE_NON_VOLATILE); } if (timeout_efivar_saved != config->timeout_sec_efivar) { @@ -1130,8 +1130,8 @@ static bool menu_run( break; default: assert(config->timeout_sec_efivar < UINT32_MAX); - efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"LoaderConfigTimeout", - config->timeout_sec_efivar, EFI_VARIABLE_NON_VOLATILE); + efivar_set_uint64_str16(MAKE_GUID_PTR(LOADER), u"LoaderConfigTimeout", + config->timeout_sec_efivar, EFI_VARIABLE_NON_VOLATILE); } } @@ -1554,7 +1554,7 @@ static EFI_STATUS efivar_get_timeout(const char16_t *var, uint64_t *ret_value) { static void config_load_defaults(Config *config, EFI_FILE *root_dir) { _cleanup_free_ char *content = NULL; - size_t content_size, value = 0; /* avoid false maybe-uninitialized warning */ + size_t content_size; EFI_STATUS err; assert(root_dir); @@ -1603,8 +1603,9 @@ static void config_load_defaults(Config *config, EFI_FILE *root_dir) { } else if (err != EFI_NOT_FOUND) log_error_status(err, "Error reading LoaderConfigTimeoutOneShot EFI variable: %m"); - err = efivar_get_uint_string(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode", &value); - if (err == EFI_SUCCESS) + uint64_t value; + err = efivar_get_uint64_str16(MAKE_GUID_PTR(LOADER), u"LoaderConfigConsoleMode", &value); + if (err == EFI_SUCCESS && value <= INT64_MAX) config->console_mode_efivar = value; err = efivar_get_str16(MAKE_GUID_PTR(LOADER), u"LoaderEntryOneShot", &config->entry_oneshot); diff --git a/src/boot/efi/efivars.c b/src/boot/efi/efivars.c index c4ced3dbd1a..2613efa6d72 100644 --- a/src/boot/efi/efivars.c +++ b/src/boot/efi/efivars.c @@ -21,11 +21,11 @@ EFI_STATUS efivar_set_str16(const EFI_GUID *vendor, const char16_t *name, const return efivar_set_raw(vendor, name, value, value ? strsize16(value) : 0, flags); } -EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t i, uint32_t flags) { +EFI_STATUS efivar_set_uint64_str16(const EFI_GUID *vendor, const char16_t *name, uint64_t i, uint32_t flags) { assert(vendor); assert(name); - _cleanup_free_ char16_t *str = xasprintf("%zu", i); + _cleanup_free_ char16_t *str = xasprintf("%" PRIu64, i); return efivar_set_str16(vendor, name, str, flags); } @@ -112,19 +112,19 @@ EFI_STATUS efivar_get_str16(const EFI_GUID *vendor, const char16_t *name, char16 return EFI_SUCCESS; } -EFI_STATUS efivar_get_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t *ret) { - _cleanup_free_ char16_t *val = NULL; +EFI_STATUS efivar_get_uint64_str16(const EFI_GUID *vendor, const char16_t *name, uint64_t *ret) { EFI_STATUS err; - uint64_t u; assert(vendor); assert(name); + _cleanup_free_ char16_t *val = NULL; err = efivar_get_str16(vendor, name, &val); if (err != EFI_SUCCESS) return err; - if (!parse_number16(val, &u, NULL) || u > SIZE_MAX) + uint64_t u; + if (!parse_number16(val, &u, NULL)) return EFI_INVALID_PARAMETER; if (ret) diff --git a/src/boot/efi/efivars.h b/src/boot/efi/efivars.h index 9e9c42b6dc8..5a5cc2501c1 100644 --- a/src/boot/efi/efivars.h +++ b/src/boot/efi/efivars.h @@ -13,7 +13,7 @@ EFI_STATUS efivar_set_str16(const EFI_GUID *vendor, const char16_t *name, const char16_t *value, uint32_t flags); EFI_STATUS efivar_set_raw(const EFI_GUID *vendor, const char16_t *name, const void *buf, size_t size, uint32_t flags); -EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t i, uint32_t flags); +EFI_STATUS efivar_set_uint64_str16(const EFI_GUID *vendor, const char16_t *name, uint64_t i, uint32_t flags); EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const char16_t *name, uint32_t value, uint32_t flags); EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, const char16_t *name, uint64_t value, uint32_t flags); void efivar_set_time_usec(const EFI_GUID *vendor, const char16_t *name, uint64_t usec); @@ -22,7 +22,7 @@ EFI_STATUS efivar_unset(const EFI_GUID *vendor, const char16_t *name, uint32_t f EFI_STATUS efivar_get_str16(const EFI_GUID *vendor, const char16_t *name, char16_t **ret); EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const char16_t *name, void **ret, size_t *ret_size); -EFI_STATUS efivar_get_uint_string(const EFI_GUID *vendor, const char16_t *name, size_t *ret); +EFI_STATUS efivar_get_uint64_str16(const EFI_GUID *vendor, const char16_t *name, uint64_t *ret); EFI_STATUS efivar_get_uint32_le(const EFI_GUID *vendor, const char16_t *name, uint32_t *ret); EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const char16_t *name, uint64_t *ret); EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const char16_t *name, bool *ret); diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c index 5a274ef6294..57f441c84bb 100644 --- a/src/boot/efi/stub.c +++ b/src/boot/efi/stub.c @@ -746,13 +746,13 @@ static void export_pcr_variables( * successfully, and encode in it which PCR was used. */ if (sections_measured > 0) - (void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrKernelImage", TPM2_PCR_KERNEL_BOOT, 0); + (void) efivar_set_uint64_str16(MAKE_GUID_PTR(LOADER), u"StubPcrKernelImage", TPM2_PCR_KERNEL_BOOT, 0); if (parameters_measured > 0) - (void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrKernelParameters", TPM2_PCR_KERNEL_CONFIG, 0); + (void) efivar_set_uint64_str16(MAKE_GUID_PTR(LOADER), u"StubPcrKernelParameters", TPM2_PCR_KERNEL_CONFIG, 0); if (sysext_measured > 0) - (void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrInitRDSysExts", TPM2_PCR_SYSEXTS, 0); + (void) efivar_set_uint64_str16(MAKE_GUID_PTR(LOADER), u"StubPcrInitRDSysExts", TPM2_PCR_SYSEXTS, 0); if (confext_measured > 0) - (void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrInitRDConfExts", TPM2_PCR_KERNEL_CONFIG, 0); + (void) efivar_set_uint64_str16(MAKE_GUID_PTR(LOADER), u"StubPcrInitRDConfExts", TPM2_PCR_KERNEL_CONFIG, 0); } static void install_embedded_devicetree( -- 2.47.3