Fix leaked proc refcnt in showmapping
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 27 Sep 2017 20:38:10 +0000 (16:38 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 29 Sep 2017 14:00:03 +0000 (10:00 -0400)
You'd only trigger this if you were using monitor functions.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/monitor.c

index b86207a..745d784 100644 (file)
@@ -140,11 +140,12 @@ int mon_reboot(int argc, char **argv, struct hw_trapframe *hw_tf)
 
 static int __showmapping(int argc, char **argv, struct hw_trapframe *hw_tf)
 {
 
 static int __showmapping(int argc, char **argv, struct hw_trapframe *hw_tf)
 {
-       struct proc *p;
+       struct proc *p = NULL;
        uintptr_t start;
        size_t size;
        pgdir_t pgdir;
        pid_t pid;
        uintptr_t start;
        size_t size;
        pgdir_t pgdir;
        pid_t pid;
+
        if (argc < 3) {
                printk("Shows virtual -> physical mappings for a virt addr range.\n");
                printk("Usage: showmapping PID START_ADDR [END_ADDR]\n");
        if (argc < 3) {
                printk("Shows virtual -> physical mappings for a virt addr range.\n");
                printk("Usage: showmapping PID START_ADDR [END_ADDR]\n");
@@ -169,6 +170,8 @@ static int __showmapping(int argc, char **argv, struct hw_trapframe *hw_tf)
                return 1;
        }
        show_mapping(pgdir, start, size);
                return 1;
        }
        show_mapping(pgdir, start, size);
+       if (p)
+               proc_decref(p);
        return 0;
 }
 
        return 0;
 }