File 0009-blsuki-conservative-UTF-8-buffer-size.patch of Package grub2
From a5b58fdf1f775f12c7560603d729f0415f47a4c1 Mon Sep 17 00:00:00 2001
From: Michael Chang <mchang@suse.com>
Date: Wed, 1 Apr 2026 12:44:29 +0200
Subject: [PATCH 9/9] blsuki: conservative UTF-8 buffer size
To be on safe side, use GRUB_MAX_UTF8_PER_UTF16 as UTF-8 for non ascii
characters can be up to 4 bytes.
---
grub-core/commands/blsuki.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/grub-core/commands/blsuki.c b/grub-core/commands/blsuki.c
index 298f04a98..adc87207e 100644
--- a/grub-core/commands/blsuki.c
+++ b/grub-core/commands/blsuki.c
@@ -1516,11 +1516,30 @@ set_bli_loader_entries (enum blsuki_cmd_type cmd_type)
if (prev_entries_size != 0 && prev_entries)
{
do {
+ grub_size_t prev_entry_size;
+
tmp16 = prev_entries;
len16 = 0;
while (*tmp16++ != '\0')
len16++;
- prev_entry = grub_malloc (len16 + 1);
+
+ if (grub_mul (len16, GRUB_MAX_UTF8_PER_UTF16, &prev_entry_size) ||
+ grub_add (prev_entry_size, 1, &prev_entry_size))
+ {
+ grub_free (prev_entries_start);
+ grub_free (efi_entries);
+ return grub_error (GRUB_ERR_OUT_OF_RANGE,
+ "LoaderEntries entry is too large");
+ }
+
+ prev_entry = grub_malloc (prev_entry_size);
+ if (prev_entry == NULL)
+ {
+ grub_free (prev_entries_start);
+ grub_free (efi_entries);
+ return grub_errno;
+ }
+
*grub_utf16_to_utf8 ((grub_uint8_t*) prev_entry, prev_entries, len16) = '\0';
rc = filevercmp (prev_entry, entry->filename);
if (rc == 0)
--
2.53.0