From f80a26e5eb7654b9d01c964fd644e8e750f0d210 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sun, 11 Jan 2026 03:45:32 +0100 Subject: [PATCH] Load kernel CR3 --- kernel/amd64/intr.c | 2 ++ kernel/amd64/intr_stub.S | 6 ++++++ kernel/amd64/syscall.c | 2 ++ kernel/amd64/syscallentry.S | 6 ++++++ 4 files changed, 16 insertions(+) diff --git a/kernel/amd64/intr.c b/kernel/amd64/intr.c index 2fe3286..88c74a9 100644 --- a/kernel/amd64/intr.c +++ b/kernel/amd64/intr.c @@ -161,6 +161,8 @@ static void amd64_intr_exception (struct saved_regs* regs) { /* Handle incoming interrupt, dispatch IRQ handlers. */ void amd64_intr_handler (void* stack_ptr) { + amd64_load_kernel_cr3 (); + struct saved_regs* regs = stack_ptr; if (regs->trap <= 31) { diff --git a/kernel/amd64/intr_stub.S b/kernel/amd64/intr_stub.S index 8549ba6..830032d 100644 --- a/kernel/amd64/intr_stub.S +++ b/kernel/amd64/intr_stub.S @@ -21,6 +21,9 @@ cld; \ ;\ movq %rsp, %rdi; \ + ;\ + movq %cr3, %rax; \ + pushq %rax; \ ;\ movq %rsp, %rbp; \ ;\ @@ -30,6 +33,9 @@ callq amd64_intr_handler; \ ;\ movq %rbp, %rsp; \ + ;\ + popq %rax; \ + movq %rax, %cr3 ;\ pop_regs; \ addq $16, %rsp; \ diff --git a/kernel/amd64/syscall.c b/kernel/amd64/syscall.c index 2838472..79b3a61 100644 --- a/kernel/amd64/syscall.c +++ b/kernel/amd64/syscall.c @@ -12,6 +12,8 @@ extern void amd64_syscall_entry (void); int amd64_syscall_dispatch (void* stack_ptr) { + amd64_load_kernel_cr3 (); + struct saved_regs* regs = stack_ptr; int syscall_num = regs->rax; diff --git a/kernel/amd64/syscallentry.S b/kernel/amd64/syscallentry.S index ddff6e8..a79fd82 100644 --- a/kernel/amd64/syscallentry.S +++ b/kernel/amd64/syscallentry.S @@ -23,6 +23,9 @@ amd64_syscall_entry: movq %rsp, %rdi + movq %cr3, %rax + pushq %rax + movq %rsp, %rbp subq $8, %rsp @@ -32,6 +35,9 @@ amd64_syscall_entry: movq %rbp, %rsp + popq %rax + movq %rax, %cr3 + pop_regs_skip_rax addq $56, %rsp