diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.c index 632313f076..27fcab19b6 100644 --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.c +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.c @@ -57,6 +57,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include "FaultTolerantWrite.h" #include "FaultTolerantWriteSmmCommon.h" @@ -417,6 +418,12 @@ SmmFaultTolerantWriteHandler ( &SmmFvbHandle ); if (!EFI_ERROR (Status)) { + // + // The AsmLfence() call here is to ensure the previous range/content + // checks for the CommBuffer have been completed before calling into + // FtwWrite(). + // + AsmLfence (); Status = FtwWrite( &mFtwDevice->FtwInstance, SmmFtwWriteHeader->Lba, diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf index 85d109e8d9..606cc2266b 100644 --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf @@ -55,6 +55,7 @@ PcdLib ReportStatusCodeLib SmmMemLib + BaseLib [Guids] #