From 900b6a5d56bf7b1106216ec45f8a6b036530fbd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Thu, 17 Jun 2021 15:07:39 +0200 Subject: [PATCH] [FREELDR] Check HwInterrupt return value _Must_inspect_result_ is there for a reason CORE-17637 --- boot/freeldr/freeldr/disk/scsiport.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/boot/freeldr/freeldr/disk/scsiport.c b/boot/freeldr/freeldr/disk/scsiport.c index c9cff4bfd60..d23fe58a76e 100644 --- a/boot/freeldr/freeldr/disk/scsiport.c +++ b/boot/freeldr/freeldr/disk/scsiport.c @@ -139,7 +139,11 @@ SpiSendSynchronousSrb( while (!(DeviceExtension->InterruptFlags & SCSI_PORT_NEXT_REQUEST_READY)) { KeStallExecutionProcessor(100 * 1000); - DeviceExtension->HwInterrupt(DeviceExtension->MiniPortDeviceExtension); + if (!DeviceExtension->HwInterrupt(DeviceExtension->MiniPortDeviceExtension)) + { + ExFreePool(Srb); + return FALSE; + } } DeviceExtension->InterruptFlags &= ~SCSI_PORT_NEXT_REQUEST_READY; @@ -157,7 +161,11 @@ SpiSendSynchronousSrb( while (Srb->SrbFlags & SRB_FLAGS_IS_ACTIVE) { KeStallExecutionProcessor(100 * 1000); - DeviceExtension->HwInterrupt(DeviceExtension->MiniPortDeviceExtension); + if (!DeviceExtension->HwInterrupt(DeviceExtension->MiniPortDeviceExtension)) + { + ExFreePool(Srb); + return FALSE; + } } ret = SRB_STATUS(Srb->SrbStatus) == SRB_STATUS_SUCCESS;