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
