From 9c7a059f64c86e5026cbbc5c6ae2f48be0f56c0c Mon Sep 17 00:00:00 2001 From: Carlos Maiolino Date: Sun, 14 Sep 2025 15:11:20 +0200 Subject: Enable interrupts only after IDT is set So far we've been playing a dangerous game... We enabled interrupts before we actually had the interrupt descriptor table setup. Fix this so we prevent IRQs to fire before the table is initialized and attempt to run garbage instead of code Signed-off-by: Carlos Maiolino --- src/idt/idt.asm | 9 +++++++++ src/include/toxic/idt.h | 2 ++ src/kernel.asm | 2 -- src/kernel.c | 2 ++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/idt/idt.asm b/src/idt/idt.asm index 235f46b..d15e565 100644 --- a/src/idt/idt.asm +++ b/src/idt/idt.asm @@ -6,7 +6,16 @@ extern default_int_handler global int21h global default_handler global idt_load +global enable_interrupts +global disable_interrupts +enable_interrupts: + sti + ret + +disable_interrupts: + cli + ret idt_load: push ebp diff --git a/src/include/toxic/idt.h b/src/include/toxic/idt.h index f54f7f7..175e84f 100644 --- a/src/include/toxic/idt.h +++ b/src/include/toxic/idt.h @@ -24,4 +24,6 @@ struct int_reg_descriptor { } __attribute__((packed)); void interrupts_init(void); +void enable_interrupts(void); +void disable_interrupts(void); #endif /* IDT_H */ diff --git a/src/kernel.asm b/src/kernel.asm index bd22761..47f5f71 100644 --- a/src/kernel.asm +++ b/src/kernel.asm @@ -35,8 +35,6 @@ _start: mov al, 00000001b ; Put the PIC in x86 mode out 0x21, al - sti - ; Jump to C code call start_kernel jmp $ diff --git a/src/kernel.c b/src/kernel.c index cd9f9d7..1605191 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -16,6 +16,8 @@ void start_kernel() kernel_heap_init(); interrupts_init(); + enable_interrupts(); + void *ptr = kmalloc(50); void *ptr2 = kmalloc(5000); -- cgit v1.2.3