diff --git a/arch/x86/kernel/entry.asm b/arch/x86/kernel/entry.asm index c33d9b97e..a0951e7ba 100644 --- a/arch/x86/kernel/entry.asm +++ b/arch/x86/kernel/entry.asm @@ -121,10 +121,11 @@ SECTION .ktext align 4 start64: ; reset registers to kill any stale realmode selectors - xor eax, eax + mov eax, 0x10 mov ds, eax mov ss, eax mov es, eax + xor eax, eax mov fs, eax mov gs, eax diff --git a/arch/x86/kernel/gdt.c b/arch/x86/kernel/gdt.c index 06481b8d7..2a6c7c8fa 100644 --- a/arch/x86/kernel/gdt.c +++ b/arch/x86/kernel/gdt.c @@ -154,7 +154,7 @@ void gdt_install(void) task_state_segments[i].ist3 = (size_t) stack_table[i] + (3 /*IST number */ - 1) * KERNEL_STACK_SIZE - 0x10; task_state_segments[i].ist4 = (size_t) stack_table[i] + (4 /*IST number */ - 1) * KERNEL_STACK_SIZE - 0x10; - gdt_set_gate(num+i*2, (unsigned long) (task_state_segments+i), sizeof(tss_t)-1, + gdt_set_gate(num+i*2, (unsigned long) (task_state_segments+i), sizeof(tss_t), GDT_FLAG_PRESENT | GDT_FLAG_TSS | GDT_FLAG_RING0, 0); }