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 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 <[email protected]>
Reviewed-by: Sudhakar Kuppusamy <[email protected]>
Reviewed-by: Avnish Chouhan <[email protected]>
Reviewed-by: Alec Brown <[email protected]>
---
 grub-core/commands/blsuki.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/grub-core/commands/blsuki.c b/grub-core/commands/blsuki.c
index 21d767f05..c41172d3a 100644
--- a/grub-core/commands/blsuki.c
+++ b/grub-core/commands/blsuki.c
@@ -1510,6 +1510,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;
 
-- 
2.51.1


_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to