[edk2-devel] [PATCH v6 12/12] OvmfPkg/MptScsiDxe: Reset device on ExitBootServices()
Nikita Leshenko
nikita.leshchenko at oracle.com
Mon May 4 21:06:07 UTC 2020
This causes the device to forget about the reply frame. We allocated the
reply frame in EfiBootServicesData type memory, and code executing after
ExitBootServices() is permitted to overwrite it.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2390
Signed-off-by: Nikita Leshenko <nikita.leshchenko at oracle.com>
Reviewed-by: Laszlo Ersek <lersek at redhat.com>
---
OvmfPkg/MptScsiDxe/MptScsi.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c
index 842c5a1b5921..a1e2d90cee05 100644
--- a/OvmfPkg/MptScsiDxe/MptScsi.c
+++ b/OvmfPkg/MptScsiDxe/MptScsi.c
@@ -59,6 +59,7 @@ typedef struct {
UINT32 StallPerPollUsec;
EFI_PCI_IO_PROTOCOL *PciIo;
UINT64 OriginalPciAttributes;
+ EFI_EVENT ExitBoot;
MPT_SCSI_DMA_BUFFER *Dma;
EFI_PHYSICAL_ADDRESS DmaPhysical;
VOID *DmaMapping;
@@ -762,6 +763,20 @@ MptScsiResetChannel (
return EFI_UNSUPPORTED;
}
+STATIC
+VOID
+EFIAPI
+MptScsiExitBoot (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ MPT_SCSI_DEV *Dev;
+
+ Dev = Context;
+ DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context));
+ MptScsiReset (Dev);
+}
STATIC
EFI_STATUS
EFIAPI
@@ -955,6 +970,17 @@ MptScsiControllerStart (
goto Unmap;
}
+ Status = gBS->CreateEvent (
+ EVT_SIGNAL_EXIT_BOOT_SERVICES,
+ TPL_CALLBACK,
+ &MptScsiExitBoot,
+ Dev,
+ &Dev->ExitBoot
+ );
+ if (EFI_ERROR (Status)) {
+ goto UninitDev;
+ }
+
//
// Host adapter channel, doesn't exist
//
@@ -979,11 +1005,14 @@ MptScsiControllerStart (
&Dev->PassThru
);
if (EFI_ERROR (Status)) {
- goto UninitDev;
+ goto CloseExitBoot;
}
return EFI_SUCCESS;
+CloseExitBoot:
+ gBS->CloseEvent (Dev->ExitBoot);
+
UninitDev:
MptScsiReset (Dev);
@@ -1059,6 +1088,8 @@ MptScsiControllerStop (
return Status;
}
+ gBS->CloseEvent (Dev->ExitBoot);
+
MptScsiReset (Dev);
Dev->PciIo->Unmap (
--
2.20.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#58576): https://edk2.groups.io/g/devel/message/58576
Mute This Topic: https://groups.io/mt/73984864/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list