summaryrefslogtreecommitdiff
path: root/sys/src/9/port/devenv.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@rei2.9hal>2012-02-08 00:00:42 +0100
committercinap_lenrek <cinap_lenrek@rei2.9hal>2012-02-08 00:00:42 +0100
commit022fd02b9632b0ca3ddd9547730446dd222ab93d (patch)
treeec2f051174546017bf0a7cdc88004728c083bf4c /sys/src/9/port/devenv.c
parentd970ed6a5a243c2ec69857b69382b79eaaad1e87 (diff)
fix endless devwalk loops caused by genbuf truncation
Diffstat (limited to 'sys/src/9/port/devenv.c')
-rw-r--r--sys/src/9/port/devenv.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/src/9/port/devenv.c b/sys/src/9/port/devenv.c
index e93a95139..0bb26dcf8 100644
--- a/sys/src/9/port/devenv.c
+++ b/sys/src/9/port/devenv.c
@@ -48,7 +48,7 @@ envgen(Chan *c, char *name, Dirtab*, int, int s, Dir *dp)
else if(s < eg->nent)
e = eg->ent[s];
- if(e == 0) {
+ if(e == 0 || (strlen(e->name) >= sizeof(up->genbuf))) {
runlock(eg);
return -1;
}
@@ -147,6 +147,9 @@ envcreate(Chan *c, char *name, int omode, ulong)
if(c->qid.type != QTDIR)
error(Eperm);
+ if(strlen(name) >= sizeof(up->genbuf))
+ error(Egreg);
+
omode = openmode(omode);
eg = envgrp(c);