]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
blsuki: Fix grub_errno leakage in blsuki_is_default_entry()
authorMichael Chang <mchang@suse.com>
Thu, 20 Nov 2025 06:25:50 +0000 (14:25 +0800)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 20 Nov 2025 16:46:08 +0000 (17:46 +0100)
The grub_strtol() call in blsuki_is_default_entry() can set grub_errno
to either GRUB_ERR_BAD_NUMBER or GRUB_ERR_OUT_OF_RANGE if the input
string is invalid or out of range.

This grub_errno value is currently left uncleared, which can lead to
unexpected behavior in subsequent functions that rely on checking
current state of grub_errno.

Clear grub_errno unconditionally when grub_strtol() reports error so
that we can plug the leak.

Signed-off-by: Michael Chang <mchang@suse.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Avnish Chouhan <avnish@linux.ibm.com>
Reviewed-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/commands/blsuki.c

index d089dec62213360e0270b5671e8cf7e7fd49ae28..a169e3f5919a7ddabeb5660c95a46df4c28a037c 100644 (file)
@@ -1360,6 +1360,10 @@ blsuki_is_default_entry (const char *def_entry, grub_blsuki_entry_t *entry, int
     return true;
 
   def_idx = grub_strtol (def_entry, &def_entry_end, 0);
+
+  /* Clear grub_errno so we can plug the leak. */
+  grub_errno = GRUB_ERR_NONE;
+
   if (*def_entry_end != '\0' || def_idx < 0 || def_idx > GRUB_INT_MAX)
     return false;