From d165ebcf4363dcdb9164d4d2eed410d01aaa1f30 Mon Sep 17 00:00:00 2001 From: Wenbo Hou Date: Fri, 23 May 2025 23:54:58 +0800 Subject: [PATCH] MdeModulePkg/FaultTolerantWriteDxe: Add validation for FtwWorkSpaceHeader Add validation for FtwWorkSpaceHeader within the WorkSpaceRefresh() function to address an issue where the variable store cannot recover from the FTW spare block if the variable store is erased or corrupted during an FTW write or reclaim operation. Signed-off-by: Wenbo Hou --- MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c | 5 ++++- .../Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c index d442ccb52f..5c168c8751 100644 --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c @@ -1300,7 +1300,10 @@ InitFtwProtocol ( // Refresh the working space data from working block // Status = WorkSpaceRefresh (FtwDevice); - ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Ftw: Init.. WorkSpaceRefresh failed: Status = %r\n", Status)); + } + // // If the working block workspace is not valid, try the spare block // diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c index fd563643eb..caa87e95d5 100644 --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c @@ -286,6 +286,10 @@ WorkSpaceRefresh ( return EFI_ABORTED; } + if (!IsValidWorkSpace (FtwDevice->FtwWorkSpaceHeader)) { + return EFI_ABORTED; + } + // // Refresh the FtwLastWriteHeader //