[kernel] Update kernel binary's header structure

The kernel's file header has not been verified for a long time. This
change returns file verification to the bootloader to make sure the ELF
loaded in position 0 is actually the kernel.
This commit is contained in:
Justin C. Miller
2021-05-28 14:44:13 -07:00
parent 910fde3b2c
commit 9fbbd8b954
6 changed files with 78 additions and 17 deletions

View File

@@ -134,8 +134,8 @@ uefi_preboot(uefi::handle image, uefi::system_table *st)
init::args *args =
allocate_args_structure(bs, max_modules, max_programs);
args->magic = init::magic;
args->version = init::version;
args->magic = init::args_magic;
args->version = init::args_version;
args->runtime_services = rs;
args->acpi_table = hw::find_acpi_table(st);
paging::allocate_tables(args, bs);
@@ -154,6 +154,9 @@ uefi_preboot(uefi::handle image, uefi::system_table *st)
loader::load_program(program, desc.name, buf, bs);
}
// First program *must* be the kernel
loader::verify_kernel_header(args->programs[0], bs);
return args;
}
@@ -196,8 +199,8 @@ efi_main(uefi::handle image, uefi::system_table *st)
memory::fix_frame_blocks(args);
kernel::entrypoint kentry =
reinterpret_cast<kernel::entrypoint>(kernel.entrypoint);
init::entrypoint kentry =
reinterpret_cast<init::entrypoint>(kernel.entrypoint);
status.next();
hw::setup_control_regs();