Fix strlen bug in devattach
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 23 Sep 2015 14:58:36 +0000 (10:58 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
The length of the buffer is not the sizeof a char *.

kern/src/ns/dev.c

index 416e47b..0fb8570 100644 (file)
@@ -98,6 +98,7 @@ struct chan *devattach(int tc, char *spec)
 {
        struct chan *c;
        char *buf;
+       size_t buflen;
 
        c = newchan();
        mkqid(&c->qid, 0, 0, QTDIR);
@@ -105,8 +106,9 @@ struct chan *devattach(int tc, char *spec)
        if (spec == NULL)
                spec = "";
        /* 2 for #c, 1 for \0 */
-       buf = kzmalloc(2 + strlen(spec) + 1, KMALLOC_WAIT);
-       snprintf(buf, sizeof(buf), "#%c%s", tc, spec);
+       buflen = 2 + strlen(spec) + 1;
+       buf = kzmalloc(buflen, KMALLOC_WAIT);
+       snprintf(buf, buflen, "#%c%s", tc, spec);
        c->name = newcname(buf);
        kfree(buf);
        return c;