mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/Core: fill logic hole in MemoryProtectionCpuArchProtocolNotify
At the end of of MemoryProtectionCpuArchProtocolNotify there's cleanup code to free resource. But at line 978, 994, 1005 the function returns directly. This patch use "goto" to replace "return" to make sure the resource is freed before exit. 1029: CoreCloseEvent (Event); 1030: return; There's another memory leak after calling gBS->LocateHandleBuffer() in the same function: Status = gBS->LocateHandleBuffer ( ByProtocol, &gEfiLoadedImageProtocolGuid, NULL, &NoHandles, &HandleBuffer ); HandleBuffer is allocated in above call but never freed. This patch will also add code to free it. Cc: Star Zeng <star.zeng@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Leif Lindholm <leif.lindholm@linaro.org> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang <jian.j.wang@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
d98fc9adfb
commit
8a7ff892ca
|
@ -975,7 +975,7 @@ MemoryProtectionCpuArchProtocolNotify (
|
|||
DEBUG ((DEBUG_INFO, "MemoryProtectionCpuArchProtocolNotify:\n"));
|
||||
Status = CoreLocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&gCpu);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -991,7 +991,7 @@ MemoryProtectionCpuArchProtocolNotify (
|
|||
HeapGuardCpuArchProtocolNotify ();
|
||||
|
||||
if (mImageProtectionPolicy == 0) {
|
||||
return;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
|
@ -1002,7 +1002,7 @@ MemoryProtectionCpuArchProtocolNotify (
|
|||
&HandleBuffer
|
||||
);
|
||||
if (EFI_ERROR (Status) && (NoHandles == 0)) {
|
||||
return ;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
for (Index = 0; Index < NoHandles; Index++) {
|
||||
|
@ -1025,9 +1025,10 @@ MemoryProtectionCpuArchProtocolNotify (
|
|||
|
||||
ProtectUefiImage (LoadedImage, LoadedImageDevicePath);
|
||||
}
|
||||
FreePool (HandleBuffer);
|
||||
|
||||
Done:
|
||||
CoreCloseEvent (Event);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue