diff options
| author | Amlal <amlal@nekernel.org> | 2025-04-30 12:34:54 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-04-30 12:34:54 +0200 |
| commit | fcea594f2df75dcd0f3d4bfeac988b748be89c13 (patch) | |
| tree | 0204f5575637644879c89a1a3c00b5848043e89b /dev/boot/src/HEL | |
| parent | 911bf2d68a4904d8ff838d31e00ef65d4e03063c (diff) | |
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 <amlal@nekernel.org>
Diffstat (limited to 'dev/boot/src/HEL')
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootAPI.S | 2 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootEFI.cc | 12 |
2 files changed, 7 insertions, 7 deletions
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); } |
