OUT VARIABLE_STORE_INFO *StoreInfo\r
)\r
{\r
+ EFI_STATUS Status;\r
EFI_HOB_GUID_TYPE *GuidHob;\r
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;\r
VARIABLE_STORE_HEADER *VariableStoreHeader;\r
EFI_PHYSICAL_ADDRESS NvStorageBase;\r
UINT32 NvStorageSize;\r
+ UINT64 NvStorageSize64;\r
FAULT_TOLERANT_WRITE_LAST_WRITE_DATA *FtwLastWriteData;\r
UINT32 BackUpOffset;\r
\r
// Emulated non-volatile variable mode is not enabled.\r
//\r
\r
- NvStorageSize = PcdGet32 (PcdFlashNvStorageVariableSize);\r
- NvStorageBase = (EFI_PHYSICAL_ADDRESS)(PcdGet64 (PcdFlashNvStorageVariableBase64) != 0 ?\r
- PcdGet64 (PcdFlashNvStorageVariableBase64) :\r
- PcdGet32 (PcdFlashNvStorageVariableBase)\r
- );\r
+ Status = GetVariableFlashNvStorageInfo (&NvStorageBase, &NvStorageSize64);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = SafeUint64ToUint32 (NvStorageSize64, &NvStorageSize);\r
+ // This driver currently assumes the size will be UINT32 so assert the value is safe for now.\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
ASSERT (NvStorageBase != 0);\r
\r
//\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/PeiServicesTablePointerLib.h>\r
#include <Library/PeiServicesLib.h>\r
+#include <Library/SafeIntLib.h>\r
+#include <Library/VariableFlashInfoLib.h>\r
\r
#include <Guid/VariableFormat.h>\r
#include <Guid/VariableIndexTable.h>\r
DebugLib\r
PeiServicesTablePointerLib\r
PeiServicesLib\r
+ SafeIntLib\r
+ VariableFlashInfoLib\r
\r
[Guids]\r
## CONSUMES ## GUID # Variable store header\r
gEfiPeiReadOnlyVariable2PpiGuid ## PRODUCES\r
\r
[Pcd]\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase ## SOMETIMES_CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 ## CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable ## SOMETIMES_CONSUMES\r
\r
[Depex]\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/AuthVariableLib.h>\r
#include <Library/VarCheckLib.h>\r
+#include <Library/VariableFlashInfoLib.h>\r
+#include <Library/SafeIntLib.h>\r
#include <Guid/GlobalVariable.h>\r
#include <Guid/EventGroup.h>\r
#include <Guid/VariableFormat.h>\r
\r
#include "PrivilegePolymorphic.h"\r
\r
-#define NV_STORAGE_VARIABLE_BASE (EFI_PHYSICAL_ADDRESS)\\r
- (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0 ? \\r
- PcdGet64 (PcdFlashNvStorageVariableBase64) : \\r
- PcdGet32 (PcdFlashNvStorageVariableBase))\r
-\r
#define EFI_VARIABLE_ATTRIBUTES_MASK (EFI_VARIABLE_NON_VOLATILE |\\r
EFI_VARIABLE_BOOTSERVICE_ACCESS | \\r
EFI_VARIABLE_RUNTIME_ACCESS | \\r
EFI_PHYSICAL_ADDRESS VariableStoreBase;\r
UINT64 VariableStoreLength;\r
UINTN FtwMaxBlockSize;\r
+ UINT32 NvStorageVariableSize;\r
+ UINT64 NvStorageVariableSize64;\r
\r
//\r
// Ensure FTW protocol is installed.\r
return;\r
}\r
\r
+ Status = GetVariableFlashNvStorageInfo (&NvStorageVariableBase, &NvStorageVariableSize64);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = SafeUint64ToUint32 (NvStorageVariableSize64, &NvStorageVariableSize);\r
+ // This driver currently assumes the size will be UINT32 so assert the value is safe for now.\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ VariableStoreBase = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength;\r
+\r
Status = FtwProtocol->GetMaxBlockSize (FtwProtocol, &FtwMaxBlockSize);\r
if (!EFI_ERROR (Status)) {\r
- ASSERT (PcdGet32 (PcdFlashNvStorageVariableSize) <= FtwMaxBlockSize);\r
+ ASSERT (NvStorageVariableSize <= FtwMaxBlockSize);\r
}\r
\r
- NvStorageVariableBase = NV_STORAGE_VARIABLE_BASE;\r
- VariableStoreBase = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength;\r
-\r
//\r
// Let NonVolatileVariableBase point to flash variable store base directly after FTW ready.\r
//\r
EFI_PHYSICAL_ADDRESS NvStorageBase;\r
UINT8 *NvStorageData;\r
UINT32 NvStorageSize;\r
+ UINT64 NvStorageSize64;\r
FAULT_TOLERANT_WRITE_LAST_WRITE_DATA *FtwLastWriteData;\r
UINT32 BackUpOffset;\r
UINT32 BackUpSize;\r
\r
mVariableModuleGlobal->FvbInstance = NULL;\r
\r
+ Status = GetVariableFlashNvStorageInfo (&NvStorageBase, &NvStorageSize64);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = SafeUint64ToUint32 (NvStorageSize64, &NvStorageSize);\r
+ // This driver currently assumes the size will be UINT32 so assert the value is safe for now.\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ ASSERT (NvStorageBase != 0);\r
+\r
//\r
// Allocate runtime memory used for a memory copy of the FLASH region.\r
// Keep the memory and the FLASH in sync as updates occur.\r
//\r
- NvStorageSize = PcdGet32 (PcdFlashNvStorageVariableSize);\r
NvStorageData = AllocateRuntimeZeroPool (NvStorageSize);\r
if (NvStorageData == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- NvStorageBase = NV_STORAGE_VARIABLE_BASE;\r
- ASSERT (NvStorageBase != 0);\r
-\r
//\r
// Copy NV storage data to the memory buffer.\r
//\r
TpmMeasurementLib\r
AuthVariableLib\r
VarCheckLib\r
+ VariableFlashInfoLib\r
VariablePolicyLib\r
VariablePolicyHelperLib\r
+ SafeIntLib\r
\r
[Protocols]\r
gEfiFirmwareVolumeBlockProtocolGuid ## CONSUMES\r
gEfiImageSecurityDatabaseGuid\r
\r
[Pcd]\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase ## SOMETIMES_CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVolatileVariableSize ## CONSUMES\r
EFI_SMM_FAULT_TOLERANT_WRITE_PROTOCOL *FtwProtocol;\r
EFI_PHYSICAL_ADDRESS NvStorageVariableBase;\r
UINTN FtwMaxBlockSize;\r
+ UINT32 NvStorageVariableSize;\r
+ UINT64 NvStorageVariableSize64;\r
\r
if (mVariableModuleGlobal->FvbInstance != NULL) {\r
return EFI_SUCCESS;\r
return Status;\r
}\r
\r
+ Status = GetVariableFlashNvStorageInfo (&NvStorageVariableBase, &NvStorageVariableSize64);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = SafeUint64ToUint32 (NvStorageVariableSize64, &NvStorageVariableSize);\r
+ // This driver currently assumes the size will be UINT32 so assert the value is safe for now.\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ ASSERT (NvStorageVariableBase != 0);\r
+ VariableStoreBase = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength;\r
+\r
Status = FtwProtocol->GetMaxBlockSize (FtwProtocol, &FtwMaxBlockSize);\r
if (!EFI_ERROR (Status)) {\r
- ASSERT (PcdGet32 (PcdFlashNvStorageVariableSize) <= FtwMaxBlockSize);\r
+ ASSERT (NvStorageVariableSize <= FtwMaxBlockSize);\r
}\r
\r
- NvStorageVariableBase = NV_STORAGE_VARIABLE_BASE;\r
- VariableStoreBase = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength;\r
-\r
//\r
// Let NonVolatileVariableBase point to flash variable store base directly after FTW ready.\r
//\r
AuthVariableLib\r
VarCheckLib\r
UefiBootServicesTableLib\r
+ VariableFlashInfoLib\r
VariablePolicyLib\r
VariablePolicyHelperLib\r
+ SafeIntLib\r
\r
[Protocols]\r
gEfiSmmFirmwareVolumeBlockProtocolGuid ## CONSUMES\r
gEdkiiVarErrorFlagGuid\r
\r
[Pcd]\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase ## SOMETIMES_CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVolatileVariableSize ## CONSUMES\r
HobLib\r
MemoryAllocationLib\r
MmServicesTableLib\r
+ SafeIntLib\r
StandaloneMmDriverEntryPoint\r
SynchronizationLib\r
VarCheckLib\r
+ VariableFlashInfoLib\r
VariablePolicyLib\r
VariablePolicyHelperLib\r
\r
gEdkiiVarErrorFlagGuid\r
\r
[Pcd]\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase ## SOMETIMES_CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 ## CONSUMES\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize ## CONSUMES\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVolatileVariableSize ## CONSUMES\r