You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
327 lines
16 KiB
327 lines
16 KiB
8 months ago
|
From a15ea7473b6e54c3019daf2a894d681c0928a132 Mon Sep 17 00:00:00 2001
|
||
|
From: Jan Janssen <medhefgo@web.de>
|
||
|
Date: Sun, 5 Jun 2022 15:08:07 +0200
|
||
|
Subject: [PATCH] boot: Drop use of xpool_print/SPrint
|
||
|
|
||
|
(cherry picked from commit 2f3c3b0bee5534f2338439f04b0aa517479f8b76)
|
||
|
|
||
|
Related: RHEL-16952
|
||
|
---
|
||
|
src/boot/efi/boot.c | 73 +++++++++++++++++++++---------------------
|
||
|
src/boot/efi/cpio.c | 2 +-
|
||
|
src/boot/efi/drivers.c | 2 +-
|
||
|
src/boot/efi/stub.c | 6 ++--
|
||
|
src/boot/efi/util.h | 1 -
|
||
|
src/boot/efi/vmm.c | 3 +-
|
||
|
6 files changed, 43 insertions(+), 44 deletions(-)
|
||
|
|
||
|
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
|
||
|
index 1e94aa57b1..64a9eda24e 100644
|
||
|
--- a/src/boot/efi/boot.c
|
||
|
+++ b/src/boot/efi/boot.c
|
||
|
@@ -3,6 +3,7 @@
|
||
|
#include <efi.h>
|
||
|
#include <efigpt.h>
|
||
|
#include <efilib.h>
|
||
|
+#include <inttypes.h>
|
||
|
|
||
|
#include "bcd.h"
|
||
|
#include "bootspec-fundamental.h"
|
||
|
@@ -417,7 +418,7 @@ static char16_t *update_timeout_efivar(uint32_t *t, bool inc) {
|
||
|
case TIMEOUT_MENU_HIDDEN:
|
||
|
return xstrdup16(u"Menu disabled. Hold down key at bootup to show menu.");
|
||
|
default:
|
||
|
- return xpool_print(L"Menu timeout set to %u s.", *t);
|
||
|
+ return xasprintf("Menu timeout set to %u s.", *t);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -749,7 +750,7 @@ static bool menu_run(
|
||
|
|
||
|
if (timeout_remain > 0) {
|
||
|
free(status);
|
||
|
- status = xpool_print(L"Boot in %u s.", timeout_remain);
|
||
|
+ status = xasprintf("Boot in %u s.", timeout_remain);
|
||
|
}
|
||
|
|
||
|
if (status) {
|
||
|
@@ -928,9 +929,9 @@ static bool menu_run(
|
||
|
break;
|
||
|
|
||
|
case KEYPRESS(0, 0, 'v'):
|
||
|
- status = xpool_print(
|
||
|
- L"systemd-boot " GIT_VERSION L" (" EFI_MACHINE_TYPE_NAME L"), "
|
||
|
- L"UEFI Specification %u.%02u, Vendor %s %u.%02u",
|
||
|
+ status = xasprintf(
|
||
|
+ "systemd-boot " GIT_VERSION " (" EFI_MACHINE_TYPE_NAME "), "
|
||
|
+ "UEFI Specification %u.%02u, Vendor %ls %u.%02u",
|
||
|
ST->Hdr.Revision >> 16,
|
||
|
ST->Hdr.Revision & 0xffff,
|
||
|
ST->FirmwareVendor,
|
||
|
@@ -952,10 +953,12 @@ static bool menu_run(
|
||
|
case KEYPRESS(0, 0, 'r'):
|
||
|
err = console_set_mode(CONSOLE_MODE_NEXT);
|
||
|
if (err != EFI_SUCCESS)
|
||
|
- status = xpool_print(L"Error changing console mode: %r", err);
|
||
|
+ status = xasprintf_status(err, "Error changing console mode: %m");
|
||
|
else {
|
||
|
config->console_mode_efivar = ST->ConOut->Mode->Mode;
|
||
|
- status = xpool_print(L"Console mode changed to %ld.", config->console_mode_efivar);
|
||
|
+ status = xasprintf(
|
||
|
+ "Console mode changed to %" PRIi64 ".",
|
||
|
+ config->console_mode_efivar);
|
||
|
}
|
||
|
new_mode = true;
|
||
|
break;
|
||
|
@@ -965,10 +968,13 @@ static bool menu_run(
|
||
|
err = console_set_mode(config->console_mode == CONSOLE_MODE_KEEP ?
|
||
|
console_mode_initial : config->console_mode);
|
||
|
if (err != EFI_SUCCESS)
|
||
|
- status = xpool_print(L"Error resetting console mode: %r", err);
|
||
|
+ status = xasprintf_status(err, "Error resetting console mode: %m");
|
||
|
else
|
||
|
- status = xpool_print(L"Console mode reset to %s default.",
|
||
|
- config->console_mode == CONSOLE_MODE_KEEP ? L"firmware" : L"configuration file");
|
||
|
+ status = xasprintf(
|
||
|
+ "Console mode reset to %s default.",
|
||
|
+ config->console_mode == CONSOLE_MODE_KEEP ?
|
||
|
+ "firmware" :
|
||
|
+ "configuration file");
|
||
|
new_mode = true;
|
||
|
break;
|
||
|
|
||
|
@@ -981,9 +987,9 @@ static bool menu_run(
|
||
|
if (FLAGS_SET(get_os_indications_supported(), EFI_OS_INDICATIONS_BOOT_TO_FW_UI)) {
|
||
|
firmware_setup = true;
|
||
|
/* Let's make sure the user really wants to do this. */
|
||
|
- status = xpool_print(L"Press Enter to reboot into firmware interface.");
|
||
|
+ status = xstrdup16(u"Press Enter to reboot into firmware interface.");
|
||
|
} else
|
||
|
- status = xpool_print(L"Reboot into firmware interface not supported.");
|
||
|
+ status = xstrdup16(u"Reboot into firmware interface not supported.");
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
@@ -1317,9 +1323,9 @@ static void config_entry_parse_tries(
|
||
|
entry->tries_done = tries_done;
|
||
|
entry->path = xstrdup16(path);
|
||
|
entry->current_name = xstrdup16(file);
|
||
|
- entry->next_name = xpool_print(
|
||
|
- L"%.*s%u-%u%s",
|
||
|
- prefix_len,
|
||
|
+ entry->next_name = xasprintf(
|
||
|
+ "%.*ls%" PRIu64 "-%" PRIu64 "%ls",
|
||
|
+ (int) prefix_len,
|
||
|
file,
|
||
|
LESS_BY(tries_left, 1u),
|
||
|
MIN(tries_done + 1, (uint64_t) INT_MAX),
|
||
|
@@ -1342,7 +1348,7 @@ static void config_entry_bump_counters(ConfigEntry *entry, EFI_FILE *root_dir) {
|
||
|
if (!entry->path || !entry->current_name || !entry->next_name)
|
||
|
return;
|
||
|
|
||
|
- old_path = xpool_print(L"%s\\%s", entry->path, entry->current_name);
|
||
|
+ old_path = xasprintf("%ls\\%ls", entry->path, entry->current_name);
|
||
|
|
||
|
err = root_dir->Open(root_dir, &handle, old_path, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
|
||
|
if (err != EFI_SUCCESS)
|
||
|
@@ -1365,7 +1371,7 @@ static void config_entry_bump_counters(ConfigEntry *entry, EFI_FILE *root_dir) {
|
||
|
|
||
|
/* Let's tell the OS that we renamed this file, so that it knows what to rename to the counter-less name on
|
||
|
* success */
|
||
|
- new_path = xpool_print(L"%s\\%s", entry->path, entry->next_name);
|
||
|
+ new_path = xasprintf("%ls\\%ls", entry->path, entry->next_name);
|
||
|
efivar_set(LOADER_GUID, L"LoaderBootCountPath", new_path, 0);
|
||
|
|
||
|
/* If the file we just renamed is the loader path, then let's update that. */
|
||
|
@@ -1479,7 +1485,7 @@ static void config_entry_add_type1(
|
||
|
|
||
|
new = xstr8_to_16(value);
|
||
|
if (entry->options) {
|
||
|
- char16_t *s = xpool_print(L"%s %s", entry->options, new);
|
||
|
+ char16_t *s = xasprintf("%ls %ls", entry->options, new);
|
||
|
free(entry->options);
|
||
|
entry->options = s;
|
||
|
} else
|
||
|
@@ -1796,7 +1802,7 @@ static void config_title_generate(Config *config) {
|
||
|
continue;
|
||
|
|
||
|
_cleanup_free_ char16_t *t = config->entries[i]->title_show;
|
||
|
- config->entries[i]->title_show = xpool_print(L"%s (%s)", t, config->entries[i]->version);
|
||
|
+ config->entries[i]->title_show = xasprintf("%ls (%ls)", t, config->entries[i]->version);
|
||
|
}
|
||
|
|
||
|
if (entries_unique(config->entries, unique, config->entry_count))
|
||
|
@@ -1813,11 +1819,7 @@ static void config_title_generate(Config *config) {
|
||
|
continue;
|
||
|
|
||
|
_cleanup_free_ char16_t *t = config->entries[i]->title_show;
|
||
|
- config->entries[i]->title_show = xpool_print(
|
||
|
- L"%s (%.*s)",
|
||
|
- t,
|
||
|
- strnlen16(config->entries[i]->machine_id, 8),
|
||
|
- config->entries[i]->machine_id);
|
||
|
+ config->entries[i]->title_show = xasprintf("%ls (%.8ls)", t, config->entries[i]->machine_id);
|
||
|
}
|
||
|
|
||
|
if (entries_unique(config->entries, unique, config->entry_count))
|
||
|
@@ -1829,7 +1831,7 @@ static void config_title_generate(Config *config) {
|
||
|
continue;
|
||
|
|
||
|
_cleanup_free_ char16_t *t = config->entries[i]->title_show;
|
||
|
- config->entries[i]->title_show = xpool_print(L"%s (%s)", t, config->entries[i]->id);
|
||
|
+ config->entries[i]->title_show = xasprintf("%ls (%ls)", t, config->entries[i]->id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -1994,10 +1996,9 @@ static EFI_STATUS boot_windows_bitlocker(void) {
|
||
|
|
||
|
for (size_t i = 0; i < boot_order_size / sizeof(uint16_t); i++) {
|
||
|
_cleanup_free_ char *buf = NULL;
|
||
|
- char16_t name[sizeof(L"Boot0000")];
|
||
|
size_t buf_size;
|
||
|
|
||
|
- SPrint(name, sizeof(name), L"Boot%04x", (uint32_t) boot_order[i]);
|
||
|
+ _cleanup_free_ char16_t *name = xasprintf("Boot%04x", boot_order[i]);
|
||
|
err = efivar_get_raw(EFI_GLOBAL_GUID, name, &buf, &buf_size);
|
||
|
if (err != EFI_SUCCESS)
|
||
|
continue;
|
||
|
@@ -2187,7 +2188,7 @@ static void config_entry_add_unified(
|
||
|
.title = xstrdup16(good_name),
|
||
|
.version = xstrdup16(good_version),
|
||
|
.device = device,
|
||
|
- .loader = xpool_print(L"\\EFI\\Linux\\%s", f->FileName),
|
||
|
+ .loader = xasprintf("\\EFI\\Linux\\%ls", f->FileName),
|
||
|
.sort_key = xstrdup16(good_sort_key),
|
||
|
.key = 'l',
|
||
|
.tries_done = -1,
|
||
|
@@ -2266,9 +2267,9 @@ static EFI_STATUS initrd_prepare(
|
||
|
STRV_FOREACH(i, entry->initrd) {
|
||
|
_cleanup_free_ char16_t *o = options;
|
||
|
if (o)
|
||
|
- options = xpool_print(L"%s initrd=%s", o, *i);
|
||
|
+ options = xasprintf("%ls initrd=%ls", o, *i);
|
||
|
else
|
||
|
- options = xpool_print(L"initrd=%s", *i);
|
||
|
+ options = xasprintf("initrd=%ls", *i);
|
||
|
|
||
|
_cleanup_(file_closep) EFI_FILE *handle = NULL;
|
||
|
err = root->Open(root, &handle, *i, EFI_FILE_MODE_READ, 0);
|
||
|
@@ -2300,7 +2301,7 @@ static EFI_STATUS initrd_prepare(
|
||
|
|
||
|
if (entry->options) {
|
||
|
_cleanup_free_ char16_t *o = options;
|
||
|
- options = xpool_print(L"%s %s", o, entry->options);
|
||
|
+ options = xasprintf("%ls %ls", o, entry->options);
|
||
|
}
|
||
|
|
||
|
*ret_options = TAKE_PTR(options);
|
||
|
@@ -2482,9 +2483,9 @@ static EFI_STATUS secure_boot_discover_keys(Config *config, EFI_FILE *root_dir)
|
||
|
|
||
|
entry = xnew(ConfigEntry, 1);
|
||
|
*entry = (ConfigEntry) {
|
||
|
- .id = xpool_print(L"secure-boot-keys-%s", dirent->FileName),
|
||
|
- .title = xpool_print(L"Enroll Secure Boot keys: %s", dirent->FileName),
|
||
|
- .path = xpool_print(L"\\loader\\keys\\%s", dirent->FileName),
|
||
|
+ .id = xasprintf("secure-boot-keys-%ls", dirent->FileName),
|
||
|
+ .title = xasprintf("Enroll Secure Boot keys: %ls", dirent->FileName),
|
||
|
+ .path = xasprintf("\\loader\\keys\\%ls", dirent->FileName),
|
||
|
.type = LOADER_SECURE_BOOT_KEYS,
|
||
|
.tries_done = -1,
|
||
|
.tries_left = -1,
|
||
|
@@ -2527,10 +2528,10 @@ static void export_variables(
|
||
|
efivar_set_time_usec(LOADER_GUID, L"LoaderTimeInitUSec", init_usec);
|
||
|
efivar_set(LOADER_GUID, L"LoaderInfo", L"systemd-boot " GIT_VERSION, 0);
|
||
|
|
||
|
- infostr = xpool_print(L"%s %u.%02u", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
|
||
|
+ infostr = xasprintf("%ls %u.%02u", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
|
||
|
efivar_set(LOADER_GUID, L"LoaderFirmwareInfo", infostr, 0);
|
||
|
|
||
|
- typestr = xpool_print(L"UEFI %u.%02u", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
|
||
|
+ typestr = xasprintf("UEFI %u.%02u", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
|
||
|
efivar_set(LOADER_GUID, L"LoaderFirmwareType", typestr, 0);
|
||
|
|
||
|
(void) efivar_set_uint64_le(LOADER_GUID, L"LoaderFeatures", loader_features, 0);
|
||
|
diff --git a/src/boot/efi/cpio.c b/src/boot/efi/cpio.c
|
||
|
index 62773ded9a..0d95d40183 100644
|
||
|
--- a/src/boot/efi/cpio.c
|
||
|
+++ b/src/boot/efi/cpio.c
|
||
|
@@ -360,7 +360,7 @@ static char16_t *get_dropin_dir(const EFI_DEVICE_PATH *file_path) {
|
||
|
return NULL;
|
||
|
|
||
|
convert_efi_path(file_path_str);
|
||
|
- return xpool_print(u"%s.extra.d", file_path_str);
|
||
|
+ return xasprintf("%ls.extra.d", file_path_str);
|
||
|
}
|
||
|
|
||
|
EFI_STATUS pack_cpio(
|
||
|
diff --git a/src/boot/efi/drivers.c b/src/boot/efi/drivers.c
|
||
|
index c76f8e0903..4abb3fbd82 100644
|
||
|
--- a/src/boot/efi/drivers.c
|
||
|
+++ b/src/boot/efi/drivers.c
|
||
|
@@ -20,7 +20,7 @@ static EFI_STATUS load_one_driver(
|
||
|
assert(loaded_image);
|
||
|
assert(fname);
|
||
|
|
||
|
- spath = xpool_print(L"\\EFI\\systemd\\drivers\\%s", fname);
|
||
|
+ spath = xasprintf("\\EFI\\systemd\\drivers\\%ls", fname);
|
||
|
err = make_file_device_path(loaded_image->DeviceHandle, spath, &path);
|
||
|
if (err != EFI_SUCCESS)
|
||
|
return log_error_status(err, "Error making file device path: %m");
|
||
|
diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c
|
||
|
index f71f041a2f..552660eb07 100644
|
||
|
--- a/src/boot/efi/stub.c
|
||
|
+++ b/src/boot/efi/stub.c
|
||
|
@@ -114,14 +114,14 @@ static void export_variables(EFI_LOADED_IMAGE_PROTOCOL *loaded_image) {
|
||
|
/* if LoaderFirmwareInfo is not set, let's set it */
|
||
|
if (efivar_get_raw(LOADER_GUID, L"LoaderFirmwareInfo", NULL, NULL) != EFI_SUCCESS) {
|
||
|
_cleanup_free_ char16_t *s = NULL;
|
||
|
- s = xpool_print(L"%s %u.%02u", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
|
||
|
+ s = xasprintf("%ls %u.%02u", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
|
||
|
efivar_set(LOADER_GUID, L"LoaderFirmwareInfo", s, 0);
|
||
|
}
|
||
|
|
||
|
/* ditto for LoaderFirmwareType */
|
||
|
if (efivar_get_raw(LOADER_GUID, L"LoaderFirmwareType", NULL, NULL) != EFI_SUCCESS) {
|
||
|
_cleanup_free_ char16_t *s = NULL;
|
||
|
- s = xpool_print(L"UEFI %u.%02u", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
|
||
|
+ s = xasprintf("UEFI %u.%02u", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
|
||
|
efivar_set(LOADER_GUID, L"LoaderFirmwareType", s, 0);
|
||
|
}
|
||
|
|
||
|
@@ -173,7 +173,7 @@ static bool use_load_options(
|
||
|
*ret = xstrdup16(shell->Argv[1]);
|
||
|
for (size_t i = 2; i < shell->Argc; i++) {
|
||
|
_cleanup_free_ char16_t *old = *ret;
|
||
|
- *ret = xpool_print(u"%s %s", old, shell->Argv[i]);
|
||
|
+ *ret = xasprintf("%ls %ls", old, shell->Argv[i]);
|
||
|
}
|
||
|
|
||
|
mangle_stub_cmdline(*ret);
|
||
|
diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h
|
||
|
index 771f11c8bd..e0c3b408f2 100644
|
||
|
--- a/src/boot/efi/util.h
|
||
|
+++ b/src/boot/efi/util.h
|
||
|
@@ -68,7 +68,6 @@ static inline void *xrealloc(void *p, size_t old_size, size_t new_size) {
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
-#define xpool_print(fmt, ...) ((char16_t *) ASSERT_SE_PTR(PoolPrint((fmt), ##__VA_ARGS__)))
|
||
|
#define xnew(type, n) ((type *) xmalloc_multiply(sizeof(type), (n)))
|
||
|
|
||
|
typedef struct {
|
||
|
diff --git a/src/boot/efi/vmm.c b/src/boot/efi/vmm.c
|
||
|
index 3dfa92b58d..b24d556700 100644
|
||
|
--- a/src/boot/efi/vmm.c
|
||
|
+++ b/src/boot/efi/vmm.c
|
||
|
@@ -97,9 +97,8 @@ EFI_STATUS vmm_open(EFI_HANDLE *ret_vmm_dev, EFI_FILE **ret_vmm_dir) {
|
||
|
|
||
|
for (size_t order = 0;; order++) {
|
||
|
_cleanup_free_ EFI_DEVICE_PATH *dp = NULL;
|
||
|
- char16_t order_str[STRLEN("VMMBootOrder") + 4 + 1];
|
||
|
|
||
|
- SPrint(order_str, sizeof(order_str), u"VMMBootOrder%04x", order);
|
||
|
+ _cleanup_free_ char16_t *order_str = xasprintf("VMMBootOrder%04zx", order);
|
||
|
dp_err = efivar_get_raw(&(EFI_GUID)VMM_BOOT_ORDER_GUID, order_str, (char**)&dp, NULL);
|
||
|
|
||
|
for (size_t i = 0; i < n_handles; i++) {
|