From 07bdd31f8352071ea6089225a8838a061e57af31 Mon Sep 17 00:00:00 2001 From: João Paulo Rechi Vita Date: Fri, 21 Apr 2017 10:54:17 -0400 Subject: fallback: Avoid duplicates in BootOrder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 https://phabricator.endlessm.com/T16731 --- fallback.c | 6 ++++-- 1 file 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++) -- cgit v1.2.3