diff options
-rw-r--r-- | EdkModulePkg/Core/Dxe/Image/Image.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/EdkModulePkg/Core/Dxe/Image/Image.c b/EdkModulePkg/Core/Dxe/Image/Image.c index f1b2c7a105..3696400072 100644 --- a/EdkModulePkg/Core/Dxe/Image/Image.c +++ b/EdkModulePkg/Core/Dxe/Image/Image.c @@ -24,9 +24,6 @@ Abstract: // Module Globals
//
-EFI_LOCK mBsExitLock = EFI_INITIALIZE_LOCK_VARIABLE(EFI_TPL_NOTIFY);
-EFI_LOCK mBsUnloadImageLock = EFI_INITIALIZE_LOCK_VARIABLE(EFI_TPL_NOTIFY);
-
LOADED_IMAGE_PRIVATE_DATA *mCurrentImage = NULL;
LOAD_PE32_IMAGE_PRIVATE_DATA mLoadPe32PrivateData = {
@@ -1221,9 +1218,14 @@ Returns: --*/
{
LOADED_IMAGE_PRIVATE_DATA *Image;
+ EFI_TPL OldTpl;
- EfiAcquireLock (&mBsExitLock);
-
+ //
+ // Prevent possible reentrance to this function
+ // for the same ImageHandle
+ //
+ OldTpl = CoreRaiseTpl (EFI_TPL_NOTIFY);
+
Image = CoreLoadedImageInfo (ImageHandle);
if (Image == NULL_HANDLE) {
Status = EFI_INVALID_PARAMETER;
@@ -1266,7 +1268,7 @@ Returns: CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);
}
- EfiReleaseLock (&mBsExitLock);
+ CoreRestoreTpl (OldTpl);
//
// return to StartImage
//
@@ -1278,7 +1280,7 @@ Returns: ASSERT (FALSE);
Status = EFI_ACCESS_DENIED;
Done:
- EfiReleaseLock (&mBsExitLock);
+ CoreRestoreTpl (OldTpl);
return Status;
}
@@ -1309,9 +1311,14 @@ Returns: {
EFI_STATUS Status;
LOADED_IMAGE_PRIVATE_DATA *Image;
+ EFI_TPL OldTpl;
- EfiAcquireLock (&mBsUnloadImageLock);
-
+ //
+ // Prevent possible reentrance to this function
+ // for the same ImageHandle
+ //
+ OldTpl = CoreRaiseTpl (EFI_TPL_NOTIFY);
+
Image = CoreLoadedImageInfo (ImageHandle);
if (Image == NULL ) {
//
@@ -1346,7 +1353,7 @@ Returns: }
Done:
- EfiReleaseLock (&mBsUnloadImageLock);
+ CoreRestoreTpl (OldTpl);
return Status;
}
|