Remove the RT attribute for HDDP variable and validate the variable content before using it.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Chao Zhang <chao.b.zhang@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15545 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Ruiyu Ni 2014-05-22 07:38:40 +00:00 committed by niruiyu
parent ed2867debc
commit f3fc9d8dc9
1 changed files with 24 additions and 7 deletions

View File

@ -2524,11 +2524,28 @@ BdsExpandPartitionPartialDevicePathToFull (
// If exist, search the front path which point to partition node in the variable instants. // If exist, search the front path which point to partition node in the variable instants.
// If fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, reconnect all and search in all system // If fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, reconnect all and search in all system
// //
CachedDevicePath = BdsLibGetVariableAndSize ( GetVariable2 (
HD_BOOT_DEVICE_PATH_VARIABLE_NAME, HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
&gHdBootDevicePathVariablGuid, &gHdBootDevicePathVariablGuid,
&CachedDevicePathSize (VOID **) &CachedDevicePath,
); &CachedDevicePathSize
);
//
// Delete the invalid HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable.
//
if ((CachedDevicePath != NULL) && !IsDevicePathValid (CachedDevicePath, CachedDevicePathSize)) {
FreePool (CachedDevicePath);
CachedDevicePath = NULL;
Status = gRT->SetVariable (
HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
&gHdBootDevicePathVariablGuid,
0,
0,
NULL
);
ASSERT_EFI_ERROR (Status);
}
if (CachedDevicePath != NULL) { if (CachedDevicePath != NULL) {
TempNewDevicePath = CachedDevicePath; TempNewDevicePath = CachedDevicePath;
@ -2591,7 +2608,7 @@ BdsExpandPartitionPartialDevicePathToFull (
Status = gRT->SetVariable ( Status = gRT->SetVariable (
HD_BOOT_DEVICE_PATH_VARIABLE_NAME, HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
&gHdBootDevicePathVariablGuid, &gHdBootDevicePathVariablGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
GetDevicePathSize (CachedDevicePath), GetDevicePathSize (CachedDevicePath),
CachedDevicePath CachedDevicePath
); );
@ -2690,7 +2707,7 @@ BdsExpandPartitionPartialDevicePathToFull (
Status = gRT->SetVariable ( Status = gRT->SetVariable (
HD_BOOT_DEVICE_PATH_VARIABLE_NAME, HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
&gHdBootDevicePathVariablGuid, &gHdBootDevicePathVariablGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
GetDevicePathSize (CachedDevicePath), GetDevicePathSize (CachedDevicePath),
CachedDevicePath CachedDevicePath
); );