diff --git a/reactos/ntoskrnl/ke/i386/ldt.c b/reactos/ntoskrnl/ke/i386/ldt.c index e266d8685cc..4422a59feb1 100644 --- a/reactos/ntoskrnl/ke/i386/ldt.c +++ b/reactos/ntoskrnl/ke/i386/ldt.c @@ -43,6 +43,7 @@ static KSPIN_LOCK LdtLock; BOOL PspIsDescriptorValid(PLDT_ENTRY ldt_entry) { + ULONG Base, SegLimit; /* Allow invalid descriptors. */ @@ -60,10 +61,10 @@ BOOL PspIsDescriptorValid(PLDT_ENTRY ldt_entry) if(!ldt_entry->HighWord.Bits.Pres) return TRUE; - ULONG Base=ldt_entry->BaseLow | (ldt_entry->HighWord.Bytes.BaseMid << 16) | + Base=ldt_entry->BaseLow | (ldt_entry->HighWord.Bytes.BaseMid << 16) | (ldt_entry->HighWord.Bytes.BaseHi << 24); - ULONG SegLimit=ldt_entry->LimitLow | + SegLimit=ldt_entry->LimitLow | (ldt_entry->HighWord.Bits.LimitHi << 16); if(ldt_entry->HighWord.Bits.Type & 0x4) @@ -87,6 +88,9 @@ NtSetLdtEntries (ULONG Selector1, { KIRQL oldIrql; ULONG NewLdtSize = sizeof(LDT_ENTRY); + PUSHORT LdtDescriptor; + ULONG LdtBase; + ULONG LdtLimit; if((Selector1 & ~0xffff) || (Selector2 & ~0xffff)) return STATUS_INVALID_LDT_DESCRIPTOR; @@ -101,11 +105,11 @@ NtSetLdtEntries (ULONG Selector1, KeAcquireSpinLock(&LdtLock, &oldIrql); - PUSHORT LdtDescriptor = (PUSHORT) &KeGetCurrentProcess()->LdtDescriptor[0]; - ULONG LdtBase = LdtDescriptor[1] | + LdtDescriptor = (PUSHORT) &KeGetCurrentProcess()->LdtDescriptor[0]; + LdtBase = LdtDescriptor[1] | ((LdtDescriptor[2] & 0xff) << 16) | ((LdtDescriptor[3] & ~0xff) << 16); - ULONG LdtLimit = LdtDescriptor[0] | + LdtLimit = LdtDescriptor[0] | ((LdtDescriptor[3] & 0xf) << 16); if(LdtLimit < (NewLdtSize - 1)) diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index a0cc014e140..bd00110b759 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: page.c,v 1.57 2003/08/19 23:59:08 dwelch Exp $ +/* $Id: page.c,v 1.58 2003/08/21 04:17:15 royce Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/mm/i386/page.c @@ -122,10 +122,13 @@ ProtectToPTE(ULONG flProtect) NTSTATUS Mmi386ReleaseMmInfo(PEPROCESS Process) { + PUSHORT LdtDescriptor; + ULONG LdtBase; + DPRINT("Mmi386ReleaseMmInfo(Process %x)\n",Process); - PUSHORT LdtDescriptor = (PUSHORT) &Process->Pcb.LdtDescriptor[0]; - ULONG LdtBase = LdtDescriptor[1] | + LdtDescriptor = (PUSHORT) &Process->Pcb.LdtDescriptor[0]; + LdtBase = LdtDescriptor[1] | ((LdtDescriptor[2] & 0xff) << 16) | ((LdtDescriptor[3] & ~0xff) << 16);