drivers/disk: EFI: More coarse validation of handles based on PCI HW subtype
diff --git a/common/drivers/disk.s2.c b/common/drivers/disk.s2.c
index ecf29349..28c94048 100644
--- a/common/drivers/disk.s2.c
+++ b/common/drivers/disk.s2.c
@@ -424,15 +424,11 @@ static bool validate_efi_handle(EFI_HANDLE efi_handle) {
break;
}
- if (dp->Type != MEDIA_DEVICE_PATH) {
+ if (dp->Type != HARDWARE_DEVICE_PATH || dp->SubType != HW_PCI_DP) {
continue;
}
- switch (dp->SubType) {
- case MEDIA_HARDDRIVE_DP:
- case MEDIA_CDROM_DP:
- return true;
- }
+ return true;
}
return false;
@@ -655,6 +651,10 @@ fail:
for (size_t i = 0; i < handle_count; i++) {
EFI_BLOCK_IO *drive = NULL;
+ if (!validate_efi_handle(handles[i])) {
+ continue;
+ }
+
status = gBS->HandleProtocol(handles[i], &block_io_guid, (void **)&drive);
if (status != 0 || drive == NULL || drive->Media->LastBlock == 0)
