Fix invalid cmdline reading from config file

Kernel cmdline data from config.cfg or grub config files were copied
to invalid address.
This is only for traditional linux boot in debug build.

Signed-off-by: Aiden Park <aiden.park@intel.com>
This commit is contained in:
Aiden Park 2019-11-22 10:26:25 -08:00 committed by Maurice Ma
parent c38f103cc3
commit 161af534d4
1 changed files with 12 additions and 6 deletions

View File

@ -376,6 +376,7 @@ GetTraditionalLinux (
MENU_ENTRY *MenuEntry;
EFI_HANDLE FileHandle;
BOOLEAN DefBootOption;
UINT32 Size;
ConfigFile = NULL;
ConfigFileSize = 0;
@ -470,13 +471,18 @@ GetTraditionalLinux (
}
// Update command line
LinuxImage->CmdFile.Size = LinuxBootCfg.MenuEntry[EntryIdx].Command.Len;
if ((LinuxImage->CmdFile.Size > 0) && (ConfigFile != NULL)) {
Size = LinuxBootCfg.MenuEntry[EntryIdx].Command.Len;
FreeImageData (&LinuxImage->CmdFile);
if ((Size > 0) && (ConfigFile != NULL)) {
LinuxImage->CmdFile.Addr = AllocatePool (Size);
if (LinuxImage->CmdFile.Addr == NULL) {
FreePool (ConfigFile);
return EFI_OUT_OF_RESOURCES;
}
LinuxImage->CmdFile.Size = Size;
Ptr = (CHAR8 *)ConfigFile + LinuxBootCfg.MenuEntry[EntryIdx].Command.Pos;
Ptr[LinuxImage->CmdFile.Size] = 0;
CopyMem (LinuxImage->CmdFile.Addr, Ptr, LinuxImage->CmdFile.Size);
} else {
LinuxImage->CmdFile.Addr = 0;
CopyMem (LinuxImage->CmdFile.Addr, Ptr, Size);
}
// Load InitRd, optional