From fcea594f2df75dcd0f3d4bfeac988b748be89c13 Mon Sep 17 00:00:00 2001 From: Amlal Date: Wed, 30 Apr 2025 12:34:54 +0200 Subject: kernel: keep track of cr3 in AMD HAL/HEL. why? To keep track of it, avoid security issues in the future. Signed-off-by: Amlal --- dev/boot/src/HEL/AMD64/BootAPI.S | 2 +- dev/boot/src/HEL/AMD64/BootEFI.cc | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'dev/boot/src/HEL') diff --git a/dev/boot/src/HEL/AMD64/BootAPI.S b/dev/boot/src/HEL/AMD64/BootAPI.S index 9cc15918..43775fc2 100644 --- a/dev/boot/src/HEL/AMD64/BootAPI.S +++ b/dev/boot/src/HEL/AMD64/BootAPI.S @@ -52,7 +52,7 @@ reset_wait: .global boot_read_cr3 boot_read_cr3: - mov rax, rax + mov rax, cr3 ret boot_write_cr3: diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index 739876da..ffc3c692 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -32,6 +32,8 @@ STATIC EfiGUID kGopGuid; EXTERN_C Void rt_reset_hardware(); +EXTERN_C Kernel::VoidPtr boot_read_cr3(); // @brief Page directory inside cr3 register. + /** @brief Finds and stores the GOP object. */ @@ -173,7 +175,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa if (reader_syschk.Blob()) { syschk_thread = new Boot::BootThread(reader_syschk.Blob()); - syschk_thread->SetName("BootZ/SysChk"); + syschk_thread->SetName("SysChk"); syschk_thread->Start(handover_hdr, NO); } @@ -236,13 +238,11 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa // ------------------------------------------ // if (reader_kernel.Blob()) { - // ------------------------------------------ // - // null these fields, to avoid being reused later. - // ------------------------------------------ // + handover_hdr->f_PageStart = boot_read_cr3(); auto kernel_thread = Boot::BootThread(reader_kernel.Blob()); - kernel_thread.SetName("BootZ/NeKernel"); + kernel_thread.SetName("NeKernel"); handover_hdr->f_KernelImage = reader_kernel.Blob(); handover_hdr->f_KernelSz = reader_kernel.Size(); @@ -256,7 +256,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa if (!reader_netboot.Blob()) return kEfiFail; auto netboot_thread = Boot::BootThread(reader_netboot.Blob()); - netboot_thread.SetName("BootZ/BootNet"); + netboot_thread.SetName("BootNet"); return netboot_thread.Start(handover_hdr, NO); } -- cgit v1.2.3