summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWenbo Hou <wenbhou@microsoft.com>2025-05-23 23:54:58 +0800
committerLiming Gao <gaoliming@byosoft.com.cn>2025-07-01 09:42:17 +0800
commitd165ebcf4363dcdb9164d4d2eed410d01aaa1f30 (patch)
tree2bf66fab1e52c419e3b0f2842345b72ebfb3e354
parent51d273d8c3dbc36f25f3d2af27bef6e01604d90c (diff)
downloadedk2-d165ebcf4363dcdb9164d4d2eed410d01aaa1f30.zip
edk2-d165ebcf4363dcdb9164d4d2eed410d01aaa1f30.tar.gz
edk2-d165ebcf4363dcdb9164d4d2eed410d01aaa1f30.tar.bz2
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 <wenbo.hou@microsoft.com>
-rw-r--r--MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c5
-rw-r--r--MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
index d442ccb..5c168c8 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 fd56364..caa87e9 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
//