On 2025-11-20 15:38, Sudhakar Kuppusamy wrote:
On 20 Nov 2025, at 1:41 PM, Avnish Chouhan <[email protected]> wrote:

Adding a fix for hist_lines memory leak and state loss. In
current code, we overwrite hist_lines before checking the
allocation result. If grub_calloc fails, hist_lines becomes NULL
and we loose the reference to the previously allocated hist_lines.
With this new change. On failure, hist_lines remains pointing to
the old valid memory. No leak, no state corruption.

Along with this, adding a failure check in grub_calloc(). If
grub_calloc fails, (e.g., due to memory allocation failure),
it returns NULL. Then, passing hist_lines (which would be NULL)
to grub_memmove() will result in a null pointer dereference,
and can cause an undefined behavior.

Sorry, Avnish. I don’t understand the above commit message. Could you
please rephrase it.

Thanks,
Sudhakar

This commit message clearly defines the problem and the intended purpose of this patch!


Signed-off-by: Avnish Chouhan <[email protected]>
---
grub-core/normal/cmdline.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c
index 9c6d9ad..14a40a4 100644
--- a/grub-core/normal/cmdline.c
+++ b/grub-core/normal/cmdline.c
@@ -42,7 +42,14 @@ grub_err_t
grub_set_history (int newsize)
{
  grub_uint32_t **old_hist_lines = hist_lines;
+
  hist_lines = grub_calloc (newsize, sizeof (grub_uint32_t *));
+  if (hist_lines == NULL)
+    {
+ /* We need to restore hist_lines to avoid memory leak and state loss */
+      hist_lines = old_hist_lines;
+      return grub_errno;
+    }

  /* Copy the old lines into the new buffer.  */
  if (old_hist_lines)
--
2.47.1


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

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

Reply via email to