diff --git a/defs.h b/defs.h
index fd154acd459364de202038ff22f99e77a87181c8..1dd415ccc5a57d64693264ddd3b7667759e03a1c 100644
--- a/defs.h
+++ b/defs.h
@@ -16,7 +16,7 @@ struct jmpbuf;
 void setupsegs(struct proc *);
 struct proc * copyproc(struct proc*);
 struct spinlock;
-int growproc(int);
+uint growproc(int);
 void sleep(void *, struct spinlock *);
 void wakeup(void *);
 void scheduler(void);
diff --git a/proc.c b/proc.c
index 81149d71afbd8137feef01d46051e4053566df4f..1d0917f8f83a7eddd00b5af03e39d4588aac1648 100644
--- a/proc.c
+++ b/proc.c
@@ -138,7 +138,7 @@ copyproc(struct proc* p)
   return np;
 }
 
-int
+uint
 growproc(int n)
 {
   struct proc *cp = curproc[cpu()];
@@ -146,14 +146,14 @@ growproc(int n)
 
   newmem = kalloc(cp->sz + n);
   if(newmem == 0)
-    return -1;
+    return 0xffffffff;
   memmove(newmem, cp->mem, cp->sz);
   memset(newmem + cp->sz, 0, n);
   oldmem = cp->mem;
   cp->mem = newmem;
   kfree(oldmem, cp->sz);
   cp->sz += n;
-  return 0;
+  return cp->sz - n;
 }
 
 // Per-CPU process scheduler. 
diff --git a/syscall.c b/syscall.c
index 0c4d65413edf8a8598d729c5746507946573c129..eaf13c5cfaf6e1e79587557738315cd8eca36c72 100644
--- a/syscall.c
+++ b/syscall.c
@@ -473,15 +473,16 @@ sys_getpid(void)
 int
 sys_sbrk(void)
 {
+  unsigned addr;
   int n;
   struct proc *cp = curproc[cpu()];
 
   if(fetcharg(0, &n) < 0)
     return -1;
-  if(growproc(n) != 0)
+  if((addr = growproc(n)) == 0xffffffff)
     return -1;
   setupsegs(cp);  
-  return 0;
+  return addr;
 }
 
 int
diff --git a/trap.c b/trap.c
index f9a9fc8d46f75e110f3beb61cd5678cec66ec9bb..ef40f7e49525dc29cf2aa0c7fb0f23c9b63140ef 100644
--- a/trap.c
+++ b/trap.c
@@ -37,7 +37,6 @@ trap(struct trapframe *tf)
 
   if(v == T_SYSCALL){
     struct proc *cp = curproc[cpu()];
-    int num = cp->tf->eax;
     if(cp->killed)
       proc_exit();
     cp->tf = tf;
diff --git a/usertests.c b/usertests.c
index 2b8b64f7bf1f5a4d9ee5473c75241a6e5f8fff99..badaa1c22f108a36c13d5c52a21f4bd287785c4d 100644
--- a/usertests.c
+++ b/usertests.c
@@ -124,6 +124,7 @@ mem(void)
 
   m1 = 0;
   while ((m2 = malloc(1024)) != 0) {
+    printf(1, "malloc %x\n", m2);
     *(char **) m2 = m1;
     m1 = m2;
   }
@@ -138,6 +139,8 @@ mem(void)
     exit();
   }
   free(m1);
+
+  printf(1, "mem ok\n");
 }
 
 int
@@ -145,10 +148,10 @@ main(int argc, char *argv[])
 {
   puts("usertests starting\n");
 
-  // pipe1();
-  // preempt();
-  // exitwait();
   mem();
+  pipe1();
+  preempt();
+  exitwait();
 
   puts("usertests finished\n");
   exit();