From 4aeba2956921a9c8cab4ffdc78849959b776ff17 Mon Sep 17 00:00:00 2001 From: Eric Snowberg Date: Mon, 13 Nov 2017 08:27:28 -0800 Subject: [PATCH] ls: prevent double open Prevent a double open. This can cause problems with some ieee1275 devices, causing the system to hang. The double open can occur as follows: grub_ls_list_files (char *dirname, int longlist, int all, int human) dev = grub_device_open (device_name); dev remains open while: grub_normal_print_device_info (device_name); dev = grub_device_open (name); Signed-off-by: Eric Snowberg Signed-off-by: Daniel Kiper Reviewed-by: Daniel Kiper --- grub-core/commands/ls.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/grub-core/commands/ls.c b/grub-core/commands/ls.c index 0eaf83652..c25161cc4 100644 --- a/grub-core/commands/ls.c +++ b/grub-core/commands/ls.c @@ -201,6 +201,15 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human) if (grub_errno == GRUB_ERR_UNKNOWN_FS) grub_errno = GRUB_ERR_NONE; +#ifdef GRUB_MACHINE_IEEE1275 + /* + * Close device to prevent a double open in grub_normal_print_device_info(). + * Otherwise it may lead to hangs on some IEEE 1275 platforms. + */ + grub_device_close (dev); + dev = NULL; +#endif + grub_normal_print_device_info (device_name); } else if (fs)