#include <Library/SmmMemLib.h>\r
\r
#include <Guid/SmmVariableCommon.h>\r
+#include <Guid/ZeroGuid.h>\r
#include "Variable.h"\r
\r
extern VARIABLE_INFO_ENTRY *gVariableInfo;\r
EFI_HANDLE mSmmVariableHandle = NULL;\r
EFI_HANDLE mVariableHandle = NULL;\r
BOOLEAN mAtRuntime = FALSE;\r
-EFI_GUID mZeroGuid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};\r
UINT8 *mVariableBufferPayload = NULL;\r
UINTN mVariableBufferPayloadSize;\r
extern BOOLEAN mEndOfDxe;\r
-extern BOOLEAN mEnableLocking;\r
+extern VAR_CHECK_REQUEST_SOURCE mRequestSource;\r
\r
/**\r
SecureBoot Hook for SetVariable.\r
//\r
// Disable write protection when the calling SetVariable() through EFI_SMM_VARIABLE_PROTOCOL.\r
//\r
- mEnableLocking = FALSE;\r
+ mRequestSource = VarCheckFromTrusted;\r
Status = VariableServiceSetVariable (\r
VariableName,\r
VendorGuid,\r
DataSize,\r
Data\r
);\r
- mEnableLocking = TRUE;\r
+ mRequestSource = VarCheckFromUntrusted;\r
return Status;\r
}\r
\r
\r
CopyGuid (&VendorGuid, &InfoEntry->VendorGuid);\r
\r
- if (CompareGuid (&VendorGuid, &mZeroGuid)) {\r
+ if (CompareGuid (&VendorGuid, &gZeroGuid)) {\r
//\r
// Return the first variable info\r
//\r
break;\r
\r
case SMM_VARIABLE_FUNCTION_READY_TO_BOOT:\r
- mEndOfDxe = TRUE;\r
- //\r
- // The initialization for variable quota.\r
- //\r
- InitializeVariableQuota ();\r
if (AtRuntime()) {\r
Status = EFI_UNSUPPORTED;\r
break;\r
}\r
+ if (!mEndOfDxe) {\r
+ mEndOfDxe = TRUE;\r
+ VarCheckLibInitializeAtEndOfDxe (NULL);\r
+ //\r
+ // The initialization for variable quota.\r
+ //\r
+ InitializeVariableQuota ();\r
+ }\r
ReclaimForOS ();\r
Status = EFI_SUCCESS;\r
break;\r
IN EFI_HANDLE Handle\r
)\r
{\r
- DEBUG ((EFI_D_INFO, "[Variable]END_OF_DXE is signaled\n"));\r
+ DEBUG ((EFI_D_INFO, "[Variable]SMM_END_OF_DXE is signaled\n"));\r
mEndOfDxe = TRUE;\r
+ VarCheckLibInitializeAtEndOfDxe (NULL);\r
//\r
// The initialization for variable quota.\r
//\r
if (PcdGetBool (PcdReclaimVariableSpaceAtEndOfDxe)) {\r
ReclaimForOS ();\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r