9ns: fix format-string vulnerability in cmderror()
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 9 May 2019 00:26:12 +0000 (20:26 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 9 May 2019 00:26:12 +0000 (20:26 -0400)
In cmderror(), the genbuf is filled with user-controlled data via the
seprintf() calls.  That data could consist of a %s.  That genbuf was
passed to error(), which takes a format string.  Thus userspace could
set the format string passed to error, triggering a page fault (at
least).

Reported-by: syzbot+36f58f45c1902ffdca18@syzkaller.appspotmail.com
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/ns/parse.c

index ceba3f8..6577f19 100644 (file)
@@ -118,7 +118,7 @@ void cmderror(struct cmdbuf *cb, char *s)
                p = seprintf(p, e, "%s", cb->f[i]);
        }
        seprintf(p, e, "\"");
                p = seprintf(p, e, "%s", cb->f[i]);
        }
        seprintf(p, e, "\"");
-       error(EFAIL, get_cur_genbuf());
+       error(EFAIL, "%s", get_cur_genbuf());
 }
 
 void debugcmd(struct cmdbuf *cb)
 }
 
 void debugcmd(struct cmdbuf *cb)