Fixes kernel argument checking in "m"
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 19 Jan 2015 23:36:07 +0000 (18:36 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 19 Jan 2015 23:36:07 +0000 (18:36 -0500)
Need at least one argument before dereferencing.

Also, debugcmd is pretty handy.

kern/include/ns.h
kern/src/monitor.c
kern/src/ns/parse.c

index 17b7a49..2c57b98 100644 (file)
@@ -650,6 +650,7 @@ void closemount(struct mount *);
 void closepgrp(struct pgrp *);
 void closesigs(struct skeyset *);
 void cmderror(struct cmdbuf *, char *unused_char_p_t);
+void debugcmd(struct cmdbuf *cb);
 struct mhead *newmhead(struct chan *from);
 int cmount(struct chan *, struct chan *, int unused_int, char *unused_char_p_t);
 void cnameclose(struct cname *);
index d3fa542..14af76b 100644 (file)
@@ -884,12 +884,15 @@ int mon_monitor(int argc, char **argv, struct hw_trapframe *hw_tf)
 
 int onecmd(int argc, char *argv[], struct hw_trapframe *hw_tf) {
        int i;
+       if (!argc)
+               return -1;
        for (i = 0; i < NCOMMANDS; i++) {
                if (strcmp(argv[0], commands[i].name) == 0)
                        return commands[i].func(argc, argv, hw_tf);
        }
        return -1;
 }
+
 static int runcmd(char *NTS real_buf, struct hw_trapframe *hw_tf) {
        char * buf = NTEXPAND(real_buf);
        int argc;
index 2d85657..8d95419 100644 (file)
@@ -94,6 +94,14 @@ void cmderror(struct cmdbuf *cb, char *s)
        error(get_cur_genbuf());
 }
 
+void debugcmd(struct cmdbuf *cb)
+{
+       printk("cb %p, nr %d\n", cb, cb->nf);
+       for (int i = 0; i < cb->nf; i++) {
+               printk("%d: %s\n", i, cb->f[i]);
+       }
+}
+
 /*
  * Look up entry in table
  */