diff options
author | Jian J Wang <jian.j.wang@intel.com> | 2018-11-03 13:58:28 +0800 |
---|---|---|
committer | Jian J Wang <jian.j.wang@intel.com> | 2018-11-07 23:08:26 +0800 |
commit | 8a7ff892ca067ff75ea41a18f703ef558956c669 (patch) | |
tree | 86182384ab2a8edc9d6f02cd0cad426e16a3e53b /MdeModulePkg | |
parent | d98fc9adfb6f4d0da5556c4a3592f01fb8731b24 (diff) | |
download | edk2-8a7ff892ca067ff75ea41a18f703ef558956c669.tar.gz edk2-8a7ff892ca067ff75ea41a18f703ef558956c669.tar.bz2 edk2-8a7ff892ca067ff75ea41a18f703ef558956c669.zip |
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>
Diffstat (limited to 'MdeModulePkg')
-rw-r--r-- | MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c index 6298b67db1..8a93c5362a 100644 --- a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c +++ b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c @@ -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;
}
/**
|