mirror of https://github.com/acidanthera/audk.git
ArmPkg: Fixed GetEnvironmentVariable() when the UEFI Variable did not exist
The function was allocating a buffer for the read value from the UEFI Variable. But it was returning the pointer of the default value when the variable was not present. It could cause error when the default value and the returned value were free when these addresses were the same (double FreePool on the same address). Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15427 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
e3ff137e36
commit
d8dc9f0af5
|
@ -66,6 +66,23 @@ BdsConnectAllDrivers (
|
|||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Return the value of a global variable defined by its VariableName.
|
||||
The variable must be defined with the VendorGuid gEfiGlobalVariableGuid.
|
||||
|
||||
@param VariableName A Null-terminated string that is the name of the vendor's
|
||||
variable.
|
||||
@param DefaultValue Value returned by the function if the variable does not exist
|
||||
@param DataSize On input, the size in bytes of the return Data buffer.
|
||||
On output the size of data returned in Data.
|
||||
@param Value Value read from the UEFI Variable or copy of the default value
|
||||
if the UEFI Variable does not exist
|
||||
|
||||
@retval EFI_SUCCESS All drivers have been connected
|
||||
@retval EFI_NOT_FOUND No handles match the search.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not resource pool memory to store the matching results.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GetGlobalEnvironmentVariable (
|
||||
IN CONST CHAR16* VariableName,
|
||||
|
@ -74,6 +91,23 @@ GetGlobalEnvironmentVariable (
|
|||
OUT VOID** Value
|
||||
);
|
||||
|
||||
/**
|
||||
Return the value of the variable defined by its VariableName and VendorGuid
|
||||
|
||||
@param VariableName A Null-terminated string that is the name of the vendor's
|
||||
variable.
|
||||
@param VendorGuid A unique identifier for the vendor.
|
||||
@param DefaultValue Value returned by the function if the variable does not exist
|
||||
@param DataSize On input, the size in bytes of the return Data buffer.
|
||||
On output the size of data returned in Data.
|
||||
@param Value Value read from the UEFI Variable or copy of the default value
|
||||
if the UEFI Variable does not exist
|
||||
|
||||
@retval EFI_SUCCESS All drivers have been connected
|
||||
@retval EFI_NOT_FOUND No handles match the search.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not resource pool memory to store the matching results.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GetEnvironmentVariable (
|
||||
IN CONST CHAR16* VariableName,
|
||||
|
|
|
@ -331,7 +331,7 @@ GetEnvironmentVariable (
|
|||
*Size,
|
||||
DefaultValue
|
||||
);
|
||||
*Value = DefaultValue;
|
||||
*Value = AllocateCopyPool (*Size, DefaultValue);
|
||||
} else {
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
@ -352,7 +352,7 @@ GetEnvironmentVariable (
|
|||
*Size = VariableSize;
|
||||
}
|
||||
} else {
|
||||
*Value = DefaultValue;
|
||||
*Value = AllocateCopyPool (*Size, DefaultValue);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue