From cdd031231cb34b1ae09530bf9b8a301bde228d20 Mon Sep 17 00:00:00 2001 From: Dmitry Gorbachev Date: Thu, 30 Jul 2009 17:54:21 +0000 Subject: [PATCH] - Fix a bug in GPF handler, do not hang in it. - Initialize Esp field in TSS. svn path=/trunk/; revision=42306 --- reactos/ntoskrnl/ke/i386/cpu.c | 2 ++ reactos/ntoskrnl/ke/i386/trap.s | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/reactos/ntoskrnl/ke/i386/cpu.c index cb7c6e7a81a..784990bea89 100644 --- a/reactos/ntoskrnl/ke/i386/cpu.c +++ b/reactos/ntoskrnl/ke/i386/cpu.c @@ -650,6 +650,7 @@ Ki386InitializeTss(IN PKTSS Tss, KiInitializeTSS(Tss); Tss->CR3 = __readcr3(); Tss->Esp0 = PtrToUlong(KiDoubleFaultStack); + Tss->Esp = PtrToUlong(KiDoubleFaultStack); Tss->Eip = PtrToUlong(KiTrap8); Tss->Cs = KGDT_R0_CODE; Tss->Fs = KGDT_R0_PCR; @@ -679,6 +680,7 @@ Ki386InitializeTss(IN PKTSS Tss, KiInitializeTSS(Tss); Tss->CR3 = __readcr3(); Tss->Esp0 = PtrToUlong(KiDoubleFaultStack); + Tss->Esp = PtrToUlong(KiDoubleFaultStack); Tss->Eip = PtrToUlong(KiTrap2); Tss->Cs = KGDT_R0_CODE; Tss->Fs = KGDT_R0_PCR; diff --git a/reactos/ntoskrnl/ke/i386/trap.s b/reactos/ntoskrnl/ke/i386/trap.s index 594a8f43051..5b0fc76a1f0 100644 --- a/reactos/ntoskrnl/ke/i386/trap.s +++ b/reactos/ntoskrnl/ke/i386/trap.s @@ -1338,7 +1338,6 @@ BogusTrap: .globl _KiTrap8 .func KiTrap8 _KiTrap8: - /* Can't really do too much */ mov eax, 8 jmp _KiSystemFatalException @@ -1511,6 +1510,7 @@ NotV86: cmp eax, offset CheckPrivilegedInstruction jbe KmodeGpf cmp eax, offset CheckPrivilegedInstruction2 + jae KmodeGpf /* FIXME: TODO */ UNHANDLED_PATH