LoadedImage->CommandLine = LoadLinuxAllocateCommandLinePages (\r
EFI_SIZE_TO_PAGES (\r
LoadedImage->CommandLineSize));\r
+ if (LoadedImage->CommandLine == NULL) {\r
+ DEBUG ((DEBUG_ERROR, "Unable to allocate memory for kernel command line!\n"));\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto FreeImage;\r
+ }\r
QemuFwCfgSelectItem (QemuFwCfgItemCommandLineData);\r
QemuFwCfgReadBytes (LoadedImage->CommandLineSize, LoadedImage->CommandLine);\r
}\r
LoadedImage->InitrdData = LoadLinuxAllocateInitrdPages (\r
LoadedImage->SetupBuf,\r
EFI_SIZE_TO_PAGES (LoadedImage->InitrdSize));\r
+ if (LoadedImage->InitrdData == NULL) {\r
+ DEBUG ((DEBUG_ERROR, "Unable to allocate memory for initrd!\n"));\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto FreeImage;\r
+ }\r
DEBUG ((DEBUG_INFO, "Initrd size: 0x%x\n",\r
(UINT32)LoadedImage->InitrdSize));\r
DEBUG ((DEBUG_INFO, "Reading initrd image ..."));\r
CHAR8 *CommandLine;\r
UINTN InitrdSize;\r
\r
+ //\r
+ // Redundant assignment to work around GCC48/GCC49 limitations.\r
+ //\r
+ CommandLine = NULL;\r
+\r
//\r
// Load the image. This should call back into the QEMU EFI loader file system.\r
//\r
\r
case EFI_SECURITY_VIOLATION:\r
//\r
- // We are running with UEFI secure boot enabled, and the image failed to\r
- // authenticate. For compatibility reasons, we fall back to the legacy\r
- // loader in this case. Since the image has been loaded, we need to unload\r
- // it before proceeding\r
+ // Since the image has been loaded, we need to unload it before proceeding\r
+ // to the EFI_ACCESS_DENIED case below.\r
//\r
gBS->UnloadImage (KernelImageHandle);\r
//\r
// Fall through\r
//\r
+ case EFI_ACCESS_DENIED:\r
+ //\r
+ // We are running with UEFI secure boot enabled, and the image failed to\r
+ // authenticate. For compatibility reasons, we fall back to the legacy\r
+ // loader in this case.\r
+ //\r
+ // Fall through\r
+ //\r
case EFI_UNSUPPORTED:\r
//\r
// The image is not natively supported or cross-type supported. Let's try\r
}\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