[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] normal/menu: Do not treat error values as key presses

From: Paul Menzel
Subject: [PATCH] normal/menu: Do not treat error values as key presses
Date: Tue, 5 Feb 2019 17:29:13 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1

Date: Sat, 4 Feb 2019 22:39:37 +0100

Some terminals, like `grub-core/term/at_keyboard.c`, return `-1` in case
they are not ready yet.

        return -1;

Currently, that is treated as a key press, and the menu time-out is
cancelled/cleared. This is unwanted, as the boot is stopped and the user
manually has to select a menu entry. Therefore, adapt the condition to
require the key value also to be greater than 0.

`GRUB_TERM_NO_KEY` is defined as 0, so the condition could be collapsed
to greater or equal than (≥) 0, but the compiler will probably do that
for us anyway, so keep the cases separate for clarity.

This is tested with coreboot, the GRUB default payload, and the
configuration file `grub.cfg` below.


    $ ./
    $ ./configure --with-platform=coreboot
    $ make -j`nproc`
    $ make default_payload.elf

For coreboot:

    $ more grub.cfg
    serial --unit 0 --speed 115200
    set timeout=5

    menuentry 'halt' {
    $ build/cbfstool build/coreboot.rom add-payload \
        -f /dev/shm/grub/default_payload.elf -n fallback/payload -c lzma
    $ build/cbfstool build/coreboot.rom add -f grub.cfg -n etc/grub.cfg -t raw
    $ qemu-system-x86_64 --version
    QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg-2+b1)
    Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers
    $ qemu-system-x86_64 -M pc -bios build/coreboot.rom -serial stdio -nic none

Currently, the time-out is cancelled/cleared. With the commit, it is not.

With a small GRUB payload, this the problem is also reproducible on the
ASRock E350M1.

Signed-off-by: Paul Menzel <address@hidden>
 grub-core/normal/menu.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c
index e7a83c2d6..68159e771 100644
--- a/grub-core/normal/menu.c
+++ b/grub-core/normal/menu.c
@@ -698,7 +698,8 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
       c = grub_getkey_noblock ();
-      if (c != GRUB_TERM_NO_KEY)
+      /* Negative values are returned on error */
+      if ((c != GRUB_TERM_NO_KEY) && (c > 0))
          if (timeout >= 0)

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]