diff options
| author | João Paulo Rechi Vita <jprvita@endlessm.com> | 2017-04-21 10:54:17 -0400 |
|---|---|---|
| committer | João Paulo Rechi Vita <jprvita@endlessm.com> | 2017-04-25 15:11:15 -0400 |
| commit | 07bdd31f8352071ea6089225a8838a061e57af31 (patch) | |
| tree | 986683ed7709e7c16b88bbe6a2c6f2efb251d56b | |
| parent | d63a91ba0e50e1e9054e200f8a3e262b668a7ad3 (diff) | |
| download | efi-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.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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++) |
