From f5997212372667e7b5db9f322d88842c713ad589 Mon Sep 17 00:00:00 2001 From: Jessica Hamilton Date: Sat, 5 May 2018 13:51:55 +1200 Subject: [PATCH] bootloader/efi: remove partition before adding to new list. * A Node/Partition cannot be member of two lists at once. This resolves an issue where a partition cannot be found later due to corruption of a NodeList. --- src/system/boot/platform/efi/devices.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/system/boot/platform/efi/devices.cpp b/src/system/boot/platform/efi/devices.cpp index bc9876b134..9e92b8f131 100644 --- a/src/system/boot/platform/efi/devices.cpp +++ b/src/system/boot/platform/efi/devices.cpp @@ -488,8 +488,10 @@ platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, NodeIterator iterator = partitions->GetIterator(); boot::Partition *partition = NULL; while ((partition = (boot::Partition*)iterator.Next()) != NULL) { - if (device_contains_partition((EfiDevice*)bootDevice, partition)) + if (device_contains_partition((EfiDevice*)bootDevice, partition)) { + iterator.Remove(); bootPartitions->Insert(partition); + } } return bootPartitions->Count() > 0 ? B_OK : B_ENTRY_NOT_FOUND;