small fixes for Windows EFI install code
Fix potential crash caused by signed vs. unsigned comparison. Negative length compares as very large unsigned number causing subsequent NULL access. Make exhaustive search for all BootNNNN variables to find one matching requested efi_distributor.
This commit is contained in:
parent
80b865bdc8
commit
e477187bf4
2 changed files with 18 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2013-12-15 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/windows/platform.c (grub_install_register_efi): Handle
|
||||||
|
unlikely errors when getting EFI variables and make exhaustive search
|
||||||
|
for all BootNNNN variables to find matching one.
|
||||||
|
|
||||||
2013-12-15 Ian Campbell <ijc@hellion.org.uk>
|
2013-12-15 Ian Campbell <ijc@hellion.org.uk>
|
||||||
|
|
||||||
* grub-core/kern/uboot/init.c: Fix units of uboot timer.
|
* grub-core/kern/uboot/init.c: Fix units of uboot timer.
|
||||||
|
|
|
@ -246,6 +246,8 @@ grub_install_register_efi (grub_device_t efidir_grub_dev,
|
||||||
void *current = NULL;
|
void *current = NULL;
|
||||||
ssize_t current_len;
|
ssize_t current_len;
|
||||||
current = get_efi_variable_bootn (i, ¤t_len);
|
current = get_efi_variable_bootn (i, ¤t_len);
|
||||||
|
if (current_len < 0)
|
||||||
|
continue; /* FIXME Should we abort on error? */
|
||||||
if (current_len < (distrib16_len + 1) * sizeof (grub_uint16_t)
|
if (current_len < (distrib16_len + 1) * sizeof (grub_uint16_t)
|
||||||
+ 6)
|
+ 6)
|
||||||
{
|
{
|
||||||
|
@ -275,13 +277,18 @@ grub_install_register_efi (grub_device_t efidir_grub_dev,
|
||||||
void *current = NULL;
|
void *current = NULL;
|
||||||
ssize_t current_len;
|
ssize_t current_len;
|
||||||
current = get_efi_variable_bootn (i, ¤t_len);
|
current = get_efi_variable_bootn (i, ¤t_len);
|
||||||
|
if (current_len < -1)
|
||||||
|
continue; /* FIXME Should we abort on error? */
|
||||||
if (current_len == -1)
|
if (current_len == -1)
|
||||||
{
|
{
|
||||||
order_num = i;
|
if (!have_order_num)
|
||||||
have_order_num = 1;
|
{
|
||||||
grub_util_info ("Creating new entry at Boot%04x",
|
order_num = i;
|
||||||
order_num);
|
have_order_num = 1;
|
||||||
break;
|
grub_util_info ("Creating new entry at Boot%04x",
|
||||||
|
order_num);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if (current_len < (distrib16_len + 1) * sizeof (grub_uint16_t)
|
if (current_len < (distrib16_len + 1) * sizeof (grub_uint16_t)
|
||||||
+ 6)
|
+ 6)
|
||||||
|
|
Loading…
Reference in a new issue