summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Paulo Rechi Vita <jprvita@endlessm.com>2017-04-21 10:54:17 -0400
committerJoão Paulo Rechi Vita <jprvita@endlessm.com>2017-04-25 15:11:15 -0400
commit07bdd31f8352071ea6089225a8838a061e57af31 (patch)
tree986683ed7709e7c16b88bbe6a2c6f2efb251d56b
parentd63a91ba0e50e1e9054e200f8a3e262b668a7ad3 (diff)
downloadefi-boot-shim-07bdd31f8352071ea6089225a8838a061e57af31.tar.gz
efi-boot-shim-07bdd31f8352071ea6089225a8838a061e57af31.zip
fallback: Avoid duplicates in BootOrder
When fallback re-uses a duplicate entry, it is likely that it is already listed in BootOrder. In this case the re-used entry should not be copied from the old BootOrder, and the new BootOrder size needs to be adjusted accordingly. Signed-off-by: João Paulo Rechi Vita <jprvita@endlessm.com> https://phabricator.endlessm.com/T16731
-rw-r--r--fallback.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fallback.c b/fallback.c
index 174fd8cb..1780dae9 100644
--- a/fallback.c
+++ b/fallback.c
@@ -204,14 +204,16 @@ do_add_boot_option(int boot_entry_num, EFI_DEVICE_PATH *hddp,
return EFI_OUT_OF_RESOURCES;
int j = 0;
+ int n = 1;
newbootorder[0] = boot_entry_num & 0xffff;
if (nbootorder) {
for (j = 0; j < nbootorder; j++)
- newbootorder[j+1] = bootorder[j];
+ if (bootorder[j] != boot_entry_num)
+ newbootorder[n++] = bootorder[j];
FreePool(bootorder);
}
bootorder = newbootorder;
- nbootorder += 1;
+ nbootorder = n;
#ifdef DEBUG_FALLBACK
Print(L"nbootorder: %d\nBootOrder: ", nbootorder);
for (j = 0 ; j < nbootorder ; j++)