X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FCore%2FDxe%2FImage%2FImage.c;h=3696400072e6f6be71090466699a6ef877228256;hp=f1b2c7a1056a45459f3c92b5b8e0c0c4660eb166;hb=b06af5d71ec9fc353b9433a26fc55d14077f7cde;hpb=4bdeaa6bb4c8b0ed211fe26ff808f7fa4c505600;ds=sidebyside 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; }