From ae1804e9cd2e9b3ec554b84202d05431390fa7a8 Mon Sep 17 00:00:00 2001 From: Malik Hammad Faisal Date: Sat, 9 Mar 2024 22:09:57 +0530 Subject: [PATCH] Corrected sp calculation in allocproc() and segment limits in seginit() --- proc.c | 2 +- vm.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/proc.c b/proc.c index 7bf3703..fa2c39b 100644 --- a/proc.c +++ b/proc.c @@ -55,7 +55,7 @@ allocproc(void) p->state = EMBRYO; p->pid = nextpid++; - sp = (char*)(STARTPROC + (PROCSIZE>>12)); + sp = (char*)(STARTPROC + (PROCSIZE << 12)); // Allocate kernel stack. p->kstack = sp - KSTACKSIZE; diff --git a/vm.c b/vm.c index d7e9b59..3c77337 100644 --- a/vm.c +++ b/vm.c @@ -20,8 +20,8 @@ seginit(void) c = &cpus[cpuid()]; c->gdt[SEG_KCODE] = SEG(STA_X|STA_R, 0, 0xffffffff, 0); c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0); - c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, STARTPROC, (PROCSIZE << 12) - 1, DPL_USER); - c->gdt[SEG_UDATA] = SEG(STA_W, STARTPROC, (PROCSIZE << 12) - 1, DPL_USER); + c->gdt[SEG_UCODE] = SEG(STA_X|STA_R, STARTPROC, (PROCSIZE << 12) - 2, DPL_USER); + c->gdt[SEG_UDATA] = SEG(STA_W, STARTPROC, (PROCSIZE << 12) - 2, DPL_USER); lgdt(c->gdt, sizeof(c->gdt)); }