When QemuLoadKernelImage() ends successfully, the command-line blob is
not freed, even though it is not used elsewhere (its content is already
copied to KernelLoadedImage->LoadOptions). The memory leak bug was
introduced in commit
7c47d89003a6 ("OvmfPkg: implement QEMU loader
library for X86 with legacy fallback", 2020-03-05).
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Tobin Feldman-Fitzthum <tobin@linux.ibm.com>
Reported-by: Laszlo Ersek <lersek@redhat.com>
Fixes: 7c47d89003a6f8f7f6f0ce8ca7d3e87c630d14cc
Signed-off-by: Dov Murik <dovmurik@linux.ibm.com>
Message-Id: <
20210628105110.379951-3-dovmurik@linux.ibm.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
}\r
\r
*ImageHandle = KernelImageHandle;\r
- return EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
\r
FreeCommandLine:\r
if (CommandLineSize > 0) {\r
FreePool (CommandLine);\r
}\r
UnloadImage:\r
- gBS->UnloadImage (KernelImageHandle);\r
+ if (EFI_ERROR (Status)) {\r
+ gBS->UnloadImage (KernelImageHandle);\r
+ }\r
\r
return Status;\r
}\r