diff --git a/memlayout.h b/memlayout.h
index ad4fda239e29c5ff3db443757afc456adde230bb..c2879b13ec1b5315071fc5c3f1fce350da5259f3 100644
--- a/memlayout.h
+++ b/memlayout.h
@@ -6,7 +6,6 @@
 
 // Key addresses for address space layout (see kmap in vm.c for the layout)
 #define KERNBASE 0xF0000000         // First kernel virtual address
-#define USERTOP  (KERNBASE-PGSIZE)  // Highest user virtual address
 #define KERNLINK (KERNBASE+EXTMEM)  // Address where kernel is linked
 
 #ifndef __ASSEMBLER__
diff --git a/vm.c b/vm.c
index e509a7215de31d50feb8c91d4b3af7544644905c..59c95ca8c677a6427e88f2127d5c9221d48a6c1e 100644
--- a/vm.c
+++ b/vm.c
@@ -99,7 +99,7 @@ mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm, char* (*alloc)(vo
 // than its memory.
 // 
 // setupkvm() and exec() set up every page table like this:
-//   0..USERTOP      : user memory (text, data, stack, heap), mapped to some unused phys mem
+//   0..KERNBASE      : user memory (text, data, stack, heap), mapped to some unused phys mem
 //   KERNBASE..KERNBASE+EXTMEM: mapped to 0..EXTMEM  (below extended memory)
 //   KERNBASE+EXTMEM..KERNBASE+end : mapped to EXTMEM..end (mapped without write permission)
 //   KERNBASE+end..KERBASE+PHYSTOP     : mapped to end..PHYSTOP (rw data + free memory)
@@ -223,7 +223,7 @@ allocuvm(pde_t *pgdir, uint oldsz, uint newsz)
   char *mem;
   uint a;
 
-  if(newsz > USERTOP)
+  if(newsz >= KERNBASE)
     return 0;
   if(newsz < oldsz)
     return oldsz;
@@ -279,7 +279,7 @@ freevm(pde_t *pgdir)
 
   if(pgdir == 0)
     panic("freevm: no pgdir");
-  deallocuvm(pgdir, USERTOP, 0);
+  deallocuvm(pgdir, KERNBASE, 0);
   for(i = 0; i < NPDENTRIES; i++){
     if(pgdir[i] & PTE_P) {
       char * v = p2v(PTE_ADDR(pgdir[i]));