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 <eric.snowberg@oracle.com>
Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Eric Snowberg authored and Daniel Kiper committed 2017-11-24 16:18:29 +01:00
1 parent 446794de8d
commit 3d8df86d82
1 file changed
+9
+9
View File
@@ -201,6 +201,15 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
if (grub_errno == GRUB_ERR_UNKNOWN_FS) if (grub_errno == GRUB_ERR_UNKNOWN_FS)
grub_errno = GRUB_ERR_NONE; 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); grub_normal_print_device_info (device_name);
} }
else if (fs) else if (fs)