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.
+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>
* grub-core/kern/uboot/init.c: Fix units of uboot timer.
void *current = NULL;
ssize_t current_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)
+ 6)
{
void *current = NULL;
ssize_t current_len;
current = get_efi_variable_bootn (i, ¤t_len);
+ if (current_len < -1)
+ continue; /* FIXME Should we abort on error? */
if (current_len == -1)
{
- order_num = i;
- have_order_num = 1;
- grub_util_info ("Creating new entry at Boot%04x",
- order_num);
- break;
+ if (!have_order_num)
+ {
+ order_num = i;
+ have_order_num = 1;
+ grub_util_info ("Creating new entry at Boot%04x",
+ order_num);
+ }
+ continue;
}
if (current_len < (distrib16_len + 1) * sizeof (grub_uint16_t)
+ 6)