From d0b6596b8e7ad72c86de0b9faa342a7a866bc87e Mon Sep 17 00:00:00 2001 From: Trammell Hudson Date: Tue, 13 Jul 2021 09:09:31 +0800 Subject: MdeModulePkg/RamDiskDxe: Init list head before registering RamDisk protocol REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3483 This patch initializes the linked list RegisteredRamDisks in RamDiskDxeEntryPoint before the registration of gEfiRamDiskProtocolGuid with InstallMultipleProtocolInterfaces, allowing ramdisks to be created via a callback installed with RegisterProtocolNotify as soon as the protocol is registered. Without this, calling RamDisk->Register() in the callback causes a crash: ASSERT [RamDiskDxe] MdePkg/Library/BaseLib/LinkedList.c(75): List->ForwardLink != ((void *) 0) Signed-off-by: Trammell Hudson Cc: Daniel Schaefer Cc: Jian J Wang Cc: Hao A Wu Cc: Ray Ni Cc: Zhichao Gao Reviewed-by: Hao A Wu --- MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDriver.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDriver.c b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDriver.c index fcbf4f117d..13e2aed87c 100644 --- a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDriver.c +++ b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDriver.c @@ -154,6 +154,12 @@ RamDiskDxeEntryPoint ( goto ErrorExit; } + // + // Initialize the list of registered RAM disks maintained by the driver + // before installing the protocol + // + InitializeListHead (&RegisteredRamDisks); + // // Install the EFI_RAM_DISK_PROTOCOL and RAM disk private data onto a // new handle @@ -170,11 +176,6 @@ RamDiskDxeEntryPoint ( goto ErrorExit; } - // - // Initialize the list of registered RAM disks maintained by the driver - // - InitializeListHead (&RegisteredRamDisks); - Status = EfiCreateEventReadyToBootEx ( TPL_CALLBACK, RamDiskAcpiCheck, -- cgit v1.2.3