summaryrefslogtreecommitdiff
path: root/sys/src/9/port
diff options
context:
space:
mode:
authorJacob Moody <moody@posixcafe.org>2022-05-28 17:23:41 +0000
committerJacob Moody <moody@posixcafe.org>2022-05-28 17:23:41 +0000
commitb75e549126641108880a24a4ff0b38171eb1a856 (patch)
treeaa08f278aaa596fe7172c1894751b50bdc6b4d9b /sys/src/9/port
parent01a6de812c2fd38c9a28036300e3c2c7dc8441f5 (diff)
kernel: be more careful about argc for /dev/drivers writes
Not crashing on 'chdev &' is important.
Diffstat (limited to 'sys/src/9/port')
-rw-r--r--sys/src/9/port/devcons.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/src/9/port/devcons.c b/sys/src/9/port/devcons.c
index 756a47936..62387dbbb 100644
--- a/sys/src/9/port/devcons.c
+++ b/sys/src/9/port/devcons.c
@@ -705,18 +705,22 @@ conswrite(Chan *c, void *va, long n, vlong off)
error(Ebadarg);
if(ct->index != CMchdev)
error(Ebadarg);
- if(cb->nf < 2 || cb->nf > 3)
+ if(cb->nf == 1)
error(Ebadarg);
invert = 1;
- a = cb->f[2];
+ a = "";
switch(cb->f[1][0]){
case '&':
+ if(cb->nf != 3)
+ error(Ebadarg);
+ a = cb->f[2];
if(cb->f[1][1] == '~')
invert--;
break;
case '~':
- a = "";
+ if(cb->nf != 2)
+ error(Ebadarg);
break;
default:
error(Ebadarg);