OvmfPkg: LoadLinuxLib: Zero kernel parameters instead of passing garbage

We're supposed to zero everything in the kernel bootparams that we don't
explicitly initialise, other than the setup_header from 0x1f1 onwards
for a precisely defined length, which is copied from the bzImage.

We're *not* supposed to just pass the garbage that we happened to find
in the bzImage file surrounding the setup_header.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14052 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jljusten
2013-01-16 06:49:45 +00:00
parent 38851e781d
commit c61a56f208
3 changed files with 55 additions and 2 deletions

View File

@@ -119,6 +119,34 @@ LoadLinuxAllocateKernelSetupPages (
}
}
EFI_STATUS
EFIAPI
LoadLinuxInitializeKernelSetup (
IN VOID *KernelSetup
)
{
EFI_STATUS Status;
UINTN SetupEnd;
struct boot_params *Bp;
Status = BasicKernelSetupCheck (KernelSetup);
if (EFI_ERROR (Status)) {
return Status;
}
Bp = (struct boot_params*) KernelSetup;
SetupEnd = 0x202 + (Bp->hdr.jump & 0xff);
//
// Clear all but the setup_header
//
ZeroMem (KernelSetup, 0x1f1);
ZeroMem (((UINT8 *)KernelSetup) + SetupEnd, 4096 - SetupEnd);
DEBUG ((EFI_D_INFO, "Cleared kernel setup 0-0x1f1, 0x%x-0x1000\n", SetupEnd));
return EFI_SUCCESS;
}
VOID*
EFIAPI