diff options
author | Wenbo Hou <wenbhou@microsoft.com> | 2025-05-23 23:54:58 +0800 |
---|---|---|
committer | Liming Gao <gaoliming@byosoft.com.cn> | 2025-07-01 09:42:17 +0800 |
commit | d165ebcf4363dcdb9164d4d2eed410d01aaa1f30 (patch) | |
tree | 2bf66fab1e52c419e3b0f2842345b72ebfb3e354 | |
parent | 51d273d8c3dbc36f25f3d2af27bef6e01604d90c (diff) | |
download | edk2-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.c | 5 | ||||
-rw-r--r-- | MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c | 4 |
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
//
|