Discussion:
[9fans] devenv
(too old to reply)
c***@gmx.de
2012-02-25 03:33:27 UTC
Permalink
devwalk() gets in a endless loop when envgen() truncates the
Dir.name (because it doesnt fit in up->genbuf) from create().

echo A >/env/AAAAAAA.... #(128 A's, works)

echo A >/env/AAAAAAA.... #(128 A's again, now process spins in kernel mode and never returns)

--
cinap
erik quanstrom
2012-02-25 04:07:35 UTC
Permalink
; diffy -c ../port/portdat.h
/n/dump/2012/0224/sys/src/9/port/portdat.h:701,707 - ../port/portdat.h:701,707
char *errstr; /* reason we're unwinding the error stack, errbuf1 or 0 */
char errbuf0[ERRMAX];
char errbuf1[ERRMAX];
- char genbuf[128]; /* buffer used e.g. for last name element from namec */
+ char genbuf[ERRMAX]; /* buffer used e.g. for last name element from namec */
Chan *slash;
Chan *dot;

; diffy -c ../port/devenv.c
/n/dump/2012/0224/sys/src/9/port/devenv.c:8,13 - ../port/devenv.c:8,14
enum
{
Maxenvsize = 16300,
+ Maxename = ERRMAX-1, /* sizeof(Proc->genbuf) */
};

static Egrp *envgrp(Chan *c);
/n/dump/2012/0224/sys/src/9/port/devenv.c:146,151 - ../port/devenv.c:147,154

if(c->qid.type != QTDIR)
error(Eperm);
+ if(strlen(name) > Maxename)
+ error("name too long");

omode = openmode(omode);
eg = envgrp(c);
Charles Forsyth
2012-02-25 11:35:05 UTC
Permalink
just say
if(strlen(name) >= sizeof(up->genbuf))
error("name too long");
if that's where they are going.

Continue reading on narkive:
Loading...