thanks, russ. Notes: Thu Mar 13 01:01:16 EDT 2008 geoff already done except for the can/can't fault business. Reference: /n/sources/patch/saved/psoops Date: Thu Mar 13 02:37:08 CET 2008 Signed-off-by: quanstro@quanstro.net Reviewed-by: geoff --- /sys/src/9/port/devproc.c Thu Mar 13 02:36:39 2008 +++ /sys/src/9/port/devproc.c Thu Mar 13 02:36:36 2008 @@ -714,13 +714,13 @@ switch(QID(c->qid)){ case Qargs: qlock(&p->debug); - j = procargs(p, p->genbuf, sizeof p->genbuf); + j = procargs(p, up->genbuf, sizeof up->genbuf); qunlock(&p->debug); if(offset >= j) return 0; if(offset+n > j) n = j-offset; - memmove(a, &p->genbuf[offset], n); + memmove(a, &up->genbuf[offset], n); return n; case Qmem: @@ -1034,10 +1034,11 @@ error(Eshort); if(n >= ERRMAX) error(Etoobig); + memmove(buf, va, n); // can fault. arg = malloc(n+1); if(arg == nil) error(Enomem); - memmove(arg, va, n); + memmove(arg, buf, n); // can't fault m = n; if(arg[m-1] != 0) arg[m++] = 0; --- /sys/src/9/port/dev.c Thu Mar 13 02:36:45 2008 +++ /sys/src/9/port/dev.c Thu Mar 13 02:36:44 2008 @@ -125,6 +125,7 @@ Chan* devattach(int tc, char *spec) { + int n; Chan *c; char *buf; @@ -133,13 +134,12 @@ c->type = devno(tc, 0); if(spec == nil) spec = ""; - buf = smalloc(4+strlen(spec)+1); - sprint(buf, "#%C%s", tc, spec); + buf = smalloc(n = 4+strlen(spec)+1); + snprint(buf, n, "#%C%s", tc, spec); c->path = newpath(buf); free(buf); return c; } - Chan* devclone(Chan *c)