From c8dd259d6174c01569f2a6da7243d74d727b2678 Mon Sep 17 00:00:00 2001 From: vanjeff Date: Thu, 29 Mar 2007 06:58:38 +0000 Subject: 1. Use MemoryAllocationLib to replace boot services memory services functions in EdkModulePkg. 2. Added NULL pointer check before calling FreePool () to fix bugs when free memory. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2513 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/Variable/RuntimeDxe/Variable.c | 56 ++++++++-------------- .../Universal/Variable/RuntimeDxe/Variable.msa | 3 ++ .../Universal/Variable/RuntimeDxe/VariableIpf.msa | 3 ++ .../Universal/Variable/RuntimeDxe/reclaim.c | 28 +++++------ 4 files changed, 41 insertions(+), 49 deletions(-) (limited to 'EdkModulePkg/Universal/Variable') diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.c b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.c index 98137c6a3f..e224558651 100644 --- a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.c +++ b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.c @@ -424,13 +424,9 @@ Returns: Variable = NextVariable; } - Status = gBS->AllocatePool ( - EfiBootServicesData, - ValidBufferSize, - (VOID **) &ValidBuffer - ); - if (EFI_ERROR (Status)) { - return Status; + ValidBuffer = AllocatePool (ValidBufferSize); + if (ValidBuffer == NULL) { + return EFI_OUT_OF_RESOURCES; } SetMem (ValidBuffer, ValidBufferSize, 0xff); @@ -481,7 +477,7 @@ Returns: } } - gBS->FreePool (ValidBuffer); + FreePool (ValidBuffer); if (EFI_ERROR (Status)) { *LastVariableOffset = 0; @@ -1253,13 +1249,13 @@ Returns: *RemainingVariableStorageSize -= VariableSize; } } - + // // Go to the next one // Variable = NextVariable; } - + ReleaseLockOnlyAtBootTime (&Global->VariableServicesLock); return EFI_SUCCESS; } @@ -1308,14 +1304,9 @@ Returns: UINTN Index; UINT8 Data; - Status = gBS->AllocatePool ( - EfiRuntimeServicesData, - sizeof (ESAL_VARIABLE_GLOBAL), - (VOID **) &mVariableModuleGlobal - ); - - if (EFI_ERROR (Status)) { - return Status; + mVariableModuleGlobal = AllocateRuntimePool (sizeof (ESAL_VARIABLE_GLOBAL)); + if (mVariableModuleGlobal == NULL) { + return EFI_OUT_OF_RESOURCES; } EfiInitializeLock(&mVariableModuleGlobal->VariableGlobal[Physical].VariableServicesLock, EFI_TPL_NOTIFY); @@ -1323,15 +1314,10 @@ Returns: // // Allocate memory for volatile variable store // - Status = gBS->AllocatePool ( - EfiRuntimeServicesData, - VARIABLE_STORE_SIZE + SCRATCH_SIZE, - (VOID **) &VolatileVariableStore - ); - - if (EFI_ERROR (Status)) { - gBS->FreePool (mVariableModuleGlobal); - return Status; + VolatileVariableStore = AllocateRuntimePool (VARIABLE_STORE_SIZE + SCRATCH_SIZE); + if (VolatileVariableStore == NULL) { + FreePool (mVariableModuleGlobal); + return EFI_OUT_OF_RESOURCES; } SetMem (VolatileVariableStore, VARIABLE_STORE_SIZE + SCRATCH_SIZE, 0xff); @@ -1367,8 +1353,8 @@ Returns: Status = gDS->GetMemorySpaceDescriptor (BaseAddress, &GcdDescriptor); if (EFI_ERROR (Status)) { - gBS->FreePool (mVariableModuleGlobal); - gBS->FreePool (VolatileVariableStore); + FreePool (mVariableModuleGlobal); + FreePool (VolatileVariableStore); return EFI_UNSUPPORTED; } @@ -1378,8 +1364,8 @@ Returns: GcdDescriptor.Attributes | EFI_MEMORY_RUNTIME ); if (EFI_ERROR (Status)) { - gBS->FreePool (mVariableModuleGlobal); - gBS->FreePool (VolatileVariableStore); + FreePool (mVariableModuleGlobal); + FreePool (VolatileVariableStore); return EFI_UNSUPPORTED; } // @@ -1448,8 +1434,8 @@ Returns: } if (EFI_ERROR (Status)) { - gBS->FreePool (mVariableModuleGlobal); - gBS->FreePool (VolatileVariableStore); + FreePool (mVariableModuleGlobal); + FreePool (VolatileVariableStore); return Status; } @@ -1473,8 +1459,8 @@ Returns: } if (EFI_ERROR (Status)) { - gBS->FreePool (mVariableModuleGlobal); - gBS->FreePool (VolatileVariableStore); + FreePool (mVariableModuleGlobal); + FreePool (VolatileVariableStore); } return Status; diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa index d1e6f3bb93..3607bc4f7f 100644 --- a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa +++ b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa @@ -52,6 +52,9 @@ BaseLib + + MemoryAllocationLib + Variable.h diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/VariableIpf.msa b/EdkModulePkg/Universal/Variable/RuntimeDxe/VariableIpf.msa index 11ca3086ba..564fc61e6e 100644 --- a/EdkModulePkg/Universal/Variable/RuntimeDxe/VariableIpf.msa +++ b/EdkModulePkg/Universal/Variable/RuntimeDxe/VariableIpf.msa @@ -55,6 +55,9 @@ BaseLib + + MemoryAllocationLib + Variable.h diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/reclaim.c b/EdkModulePkg/Universal/Variable/RuntimeDxe/reclaim.c index 00ebcf84fd..4c7249046c 100644 --- a/EdkModulePkg/Universal/Variable/RuntimeDxe/reclaim.c +++ b/EdkModulePkg/Universal/Variable/RuntimeDxe/reclaim.c @@ -1,20 +1,20 @@ /*++ -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +Copyright (c) 2006 - 2007, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. Module Name: reclaim.c - + Abstract: - + Handles non-volatile variable store garbage collection, using FTW (Fault Tolerant Write) protocol. @@ -82,7 +82,7 @@ GetFvbHandleByAddress ( } } - gBS->FreePool (HandleBuffer); + FreePool (HandleBuffer); return Status; } @@ -216,8 +216,8 @@ Returns: // Prepare for the variable data // FtwBufferSize = ((VARIABLE_STORE_HEADER *) ((UINTN) VariableBase))->Size; - Status = gBS->AllocatePool (EfiRuntimeServicesData, FtwBufferSize, (VOID **) &FtwBuffer); - if (EFI_ERROR (Status)) { + FtwBuffer = AllocateRuntimePool (FtwBufferSize); + if (FtwBuffer == NULL) { return EFI_OUT_OF_RESOURCES; } @@ -236,6 +236,6 @@ Returns: FtwBuffer ); - gBS->FreePool (FtwBuffer); + FreePool (FtwBuffer); return Status; } -- cgit v1.2.3