mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 08:04:07 +02:00
judge recovery mode at ReadOnlyVariable2Ppi interface. if yes, then return EFI_NOT_FOUND
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11397 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
357237bfda
commit
4249fa760f
@ -32,20 +32,35 @@ EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = {
|
|||||||
&mVariablePpi
|
&mVariablePpi
|
||||||
};
|
};
|
||||||
|
|
||||||
EFI_PEI_READ_ONLY_VARIABLE2_PPI mVariablePpiRecovery = {
|
|
||||||
PeiGetVariableRecovery,
|
|
||||||
PeiGetNextVariableNameRecovery
|
|
||||||
};
|
|
||||||
|
|
||||||
EFI_PEI_PPI_DESCRIPTOR mPpiListVariableRecovery = {
|
|
||||||
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
|
||||||
&gEfiPeiReadOnlyVariable2PpiGuid,
|
|
||||||
&mVariablePpiRecovery
|
|
||||||
};
|
|
||||||
|
|
||||||
EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID;
|
EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if it runs in Recovery mode.
|
||||||
|
|
||||||
|
@param PeiServices General purpose services available to every PEIM.
|
||||||
|
|
||||||
|
@retval TRUE It's in Recovery mode.
|
||||||
|
@retval FALSE It's not in Recovery mode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
IsInRecoveryMode (
|
||||||
|
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_BOOT_MODE BootMode;
|
||||||
|
|
||||||
|
Status = (*PeiServices)->GetBootMode (PeiServices, &BootMode);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
if (BootMode == BOOT_IN_RECOVERY_MODE) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Provide the functionality of the variable services.
|
Provide the functionality of the variable services.
|
||||||
|
|
||||||
@ -64,24 +79,7 @@ PeimInitializeVariableServices (
|
|||||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_BOOT_MODE BootMode;
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check if this is recovery boot path.
|
|
||||||
// If no, provide other modules the access capability to variable area in NV storage.
|
|
||||||
// If yes, the content of variable area is not reliable. Therefore,
|
|
||||||
// we provide a dummy ReadOnlyVariable2Ppi interface to other pei modules.
|
|
||||||
//
|
|
||||||
Status = (*PeiServices)->GetBootMode (PeiServices, &BootMode);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
|
|
||||||
if (BootMode == BOOT_IN_RECOVERY_MODE) {
|
|
||||||
return PeiServicesInstallPpi (&mPpiListVariableRecovery);
|
|
||||||
}
|
|
||||||
|
|
||||||
return PeiServicesInstallPpi (&mPpiListVariable);
|
return PeiServicesInstallPpi (&mPpiListVariable);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -563,6 +561,16 @@ PeiGetVariable (
|
|||||||
if (VariableName == NULL || VariableGuid == NULL || DataSize == NULL) {
|
if (VariableName == NULL || VariableGuid == NULL || DataSize == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check if this is recovery boot path.
|
||||||
|
// If yes, the content of variable area is not reliable. Therefore we directly
|
||||||
|
// return EFI_NOT_FOUND.
|
||||||
|
//
|
||||||
|
if (IsInRecoveryMode(PeiServices)) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Find existing variable
|
// Find existing variable
|
||||||
//
|
//
|
||||||
@ -641,6 +649,15 @@ PeiGetNextVariableName (
|
|||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check if this is recovery boot path.
|
||||||
|
// If yes, the content of variable area is not reliable. Therefore we directly
|
||||||
|
// return EFI_NOT_FOUND.
|
||||||
|
//
|
||||||
|
if (IsInRecoveryMode(PeiServices)) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
Status = FindVariable (PeiServices, VariableName, VariableGuid, &Variable);
|
Status = FindVariable (PeiServices, VariableName, VariableGuid, &Variable);
|
||||||
if (Variable.CurrPtr == NULL || Status != EFI_SUCCESS) {
|
if (Variable.CurrPtr == NULL || Status != EFI_SUCCESS) {
|
||||||
return Status;
|
return Status;
|
||||||
@ -684,84 +701,3 @@ PeiGetNextVariableName (
|
|||||||
|
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
This service retrieves a variable's value using its name and GUID.
|
|
||||||
|
|
||||||
Read the specified variable from the UEFI variable store. If the Data
|
|
||||||
buffer is too small to hold the contents of the variable, the error
|
|
||||||
EFI_BUFFER_TOO_SMALL is returned and DataSize is set to the required buffer
|
|
||||||
size to obtain the data.
|
|
||||||
|
|
||||||
@param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.
|
|
||||||
@param VariableName A pointer to a null-terminated string that is the variable's name.
|
|
||||||
@param VariableGuid A pointer to an EFI_GUID that is the variable's GUID. The combination of
|
|
||||||
VariableGuid and VariableName must be unique.
|
|
||||||
@param Attributes If non-NULL, on return, points to the variable's attributes.
|
|
||||||
@param DataSize On entry, points to the size in bytes of the Data buffer.
|
|
||||||
On return, points to the size of the data returned in Data.
|
|
||||||
@param Data Points to the buffer which will hold the returned variable value.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The variable was read successfully.
|
|
||||||
@retval EFI_NOT_FOUND The variable could not be found.
|
|
||||||
@retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the resulting data.
|
|
||||||
DataSize is updated with the size required for
|
|
||||||
the specified variable.
|
|
||||||
@retval EFI_INVALID_PARAMETER VariableName, VariableGuid, DataSize or Data is NULL.
|
|
||||||
@retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
PeiGetVariableRecovery (
|
|
||||||
IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
|
|
||||||
IN CONST CHAR16 *VariableName,
|
|
||||||
IN CONST EFI_GUID *VariableGuid,
|
|
||||||
OUT UINT32 *Attributes,
|
|
||||||
IN OUT UINTN *DataSize,
|
|
||||||
OUT VOID *Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the next variable name and GUID.
|
|
||||||
|
|
||||||
This function is called multiple times to retrieve the VariableName
|
|
||||||
and VariableGuid of all variables currently available in the system.
|
|
||||||
On each call, the previous results are passed into the interface,
|
|
||||||
and, on return, the interface returns the data for the next
|
|
||||||
interface. When the entire variable list has been returned,
|
|
||||||
EFI_NOT_FOUND is returned.
|
|
||||||
|
|
||||||
@param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.
|
|
||||||
|
|
||||||
@param VariableNameSize On entry, points to the size of the buffer pointed to by VariableName.
|
|
||||||
@param VariableName On entry, a pointer to a null-terminated string that is the variable's name.
|
|
||||||
On return, points to the next variable's null-terminated name string.
|
|
||||||
|
|
||||||
@param VariableGuid On entry, a pointer to an UEFI _GUID that is the variable's GUID.
|
|
||||||
On return, a pointer to the next variable's GUID.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The variable was read successfully.
|
|
||||||
@retval EFI_NOT_FOUND The variable could not be found.
|
|
||||||
@retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the resulting
|
|
||||||
data. VariableNameSize is updated with the size
|
|
||||||
required for the specified variable.
|
|
||||||
@retval EFI_INVALID_PARAMETER VariableName, VariableGuid or
|
|
||||||
VariableNameSize is NULL.
|
|
||||||
@retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
PeiGetNextVariableNameRecovery (
|
|
||||||
IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
|
|
||||||
IN OUT UINTN *VariableNameSize,
|
|
||||||
IN OUT CHAR16 *VariableName,
|
|
||||||
IN OUT EFI_GUID *VariableGuid
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
@ -153,80 +153,4 @@ PeiGetNextVariableName (
|
|||||||
IN OUT EFI_GUID *VariableGuid
|
IN OUT EFI_GUID *VariableGuid
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
This service retrieves a variable's value using its name and GUID.
|
|
||||||
|
|
||||||
Read the specified variable from the UEFI variable store. If the Data
|
|
||||||
buffer is too small to hold the contents of the variable, the error
|
|
||||||
EFI_BUFFER_TOO_SMALL is returned and DataSize is set to the required buffer
|
|
||||||
size to obtain the data.
|
|
||||||
|
|
||||||
@param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.
|
|
||||||
@param VariableName A pointer to a null-terminated string that is the variable's name.
|
|
||||||
@param VariableGuid A pointer to an EFI_GUID that is the variable's GUID. The combination of
|
|
||||||
VariableGuid and VariableName must be unique.
|
|
||||||
@param Attributes If non-NULL, on return, points to the variable's attributes.
|
|
||||||
@param DataSize On entry, points to the size in bytes of the Data buffer.
|
|
||||||
On return, points to the size of the data returned in Data.
|
|
||||||
@param Data Points to the buffer which will hold the returned variable value.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The variable was read successfully.
|
|
||||||
@retval EFI_NOT_FOUND The variable could not be found.
|
|
||||||
@retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the resulting data.
|
|
||||||
DataSize is updated with the size required for
|
|
||||||
the specified variable.
|
|
||||||
@retval EFI_INVALID_PARAMETER VariableName, VariableGuid, DataSize or Data is NULL.
|
|
||||||
@retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
PeiGetVariableRecovery (
|
|
||||||
IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
|
|
||||||
IN CONST CHAR16 *VariableName,
|
|
||||||
IN CONST EFI_GUID *VariableGuid,
|
|
||||||
OUT UINT32 *Attributes,
|
|
||||||
IN OUT UINTN *DataSize,
|
|
||||||
OUT VOID *Data
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the next variable name and GUID.
|
|
||||||
|
|
||||||
This function is called multiple times to retrieve the VariableName
|
|
||||||
and VariableGuid of all variables currently available in the system.
|
|
||||||
On each call, the previous results are passed into the interface,
|
|
||||||
and, on return, the interface returns the data for the next
|
|
||||||
interface. When the entire variable list has been returned,
|
|
||||||
EFI_NOT_FOUND is returned.
|
|
||||||
|
|
||||||
@param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.
|
|
||||||
|
|
||||||
@param VariableNameSize On entry, points to the size of the buffer pointed to by VariableName.
|
|
||||||
@param VariableName On entry, a pointer to a null-terminated string that is the variable's name.
|
|
||||||
On return, points to the next variable's null-terminated name string.
|
|
||||||
|
|
||||||
@param VariableGuid On entry, a pointer to an UEFI _GUID that is the variable's GUID.
|
|
||||||
On return, a pointer to the next variable's GUID.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The variable was read successfully.
|
|
||||||
@retval EFI_NOT_FOUND The variable could not be found.
|
|
||||||
@retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the resulting
|
|
||||||
data. VariableNameSize is updated with the size
|
|
||||||
required for the specified variable.
|
|
||||||
@retval EFI_INVALID_PARAMETER VariableName, VariableGuid or
|
|
||||||
VariableNameSize is NULL.
|
|
||||||
@retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
PeiGetNextVariableNameRecovery (
|
|
||||||
IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
|
|
||||||
IN OUT UINTN *VariableNameSize,
|
|
||||||
IN OUT CHAR16 *VariableName,
|
|
||||||
IN OUT EFI_GUID *VariableGuid
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 ## CONSUMES
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 ## CONSUMES
|
||||||
|
|
||||||
[Depex]
|
[Depex]
|
||||||
gEfiPeiMasterBootModePpiGuid
|
TRUE
|
||||||
|
|
||||||
#
|
#
|
||||||
# [BootMode]
|
# [BootMode]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user