diff --git a/ChangeLog b/ChangeLog index 107c049ce..cc5d5e350 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-02-25 Andrey Borzenkov + + * grub-core/normal/menu_entry.c (insert_string): fix off by one + access to unallocated memory. + 2013-02-25 Andrey Borzenkov * Makefile.util.def: Add partmap/msdos.c to common library. diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c index 7cd67f360..85f97da13 100644 --- a/grub-core/normal/menu_entry.c +++ b/grub-core/normal/menu_entry.c @@ -393,11 +393,12 @@ insert_string (struct screen *screen, const char *s, int update) if (! screen->lines) return 0; - /* Scroll down. */ - grub_memmove (screen->lines + screen->line + 2, - screen->lines + screen->line + 1, - ((screen->num_lines - screen->line - 2) - * sizeof (struct line))); + /* Shift down if not appending after the last line. */ + if (screen->line < screen->num_lines - 2) + grub_memmove (screen->lines + screen->line + 2, + screen->lines + screen->line + 1, + ((screen->num_lines - screen->line - 2) + * sizeof (struct line))); if (! init_line (screen, screen->lines + screen->line + 1)) return 0;