The loader prints UEFI strings with %ls in a good two dozen places: the
variable name in the error path of efi_var_restore(), the EFI_ENTRY()
traces of the variable, console, HII and unicode collation protocols and
the exit data of a failed EFI payload.

%ls only formats UTF-16 when PRINTF_WCHAR is enabled; otherwise vsprintf
falls back to treating the argument as a C string, which for a UTF-16
string ends at the high byte of its first character:

  efi-loader: var-file: Failed to set EFI variable V

instead of "Var0430". EFI_PAYLOAD already selects the symbol, do the same
for EFI_LOADER.

Assisted-by: Claude:opus-5
Signed-off-by: Ahmad Fatoum <[email protected]>
---
 efi/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/efi/Kconfig b/efi/Kconfig
index b8f118a8812f..920705633cc7 100644
--- a/efi/Kconfig
+++ b/efi/Kconfig
@@ -38,6 +38,7 @@ config EFI_LOADER
        select PARTITION_DISK
        select MEMORY_ATTRIBUTES
        select CRC32
+       select PRINTF_WCHAR
        help
          Select this option if you want to run UEFI applications (like GNU
          GRUB or an EFI-stubbed kernel) on top of barebox.
-- 
2.47.3


Reply via email to