--- /n/sources/plan9/sys/src/cmd/exportfs/exportsrv.c Tue Sep 22 06:04:31 2026 +++ /sys/src/cmd/exportfs/exportsrv.c Tue Sep 22 00:00:00 2026 @@ -25,6 +25,7 @@ char Enomem[] = "No memory"; char Eversion[] = "Bad 9P2000 version"; char Ereadonly[] = "File system read only"; +char Ebadname[] = "Bad character in file name"; ulong messagesize; int readonly; @@ -159,6 +160,12 @@ return n; } +static int +badname(char *name) +{ + return *name == '\0' || strchr(name, '/') != nil; +} + void Xwalk(Fsrpc *t) { @@ -189,6 +196,11 @@ break; } + if(badname(t->work.wname[i])) { + e = Ebadname; + break; + } + if(strcmp(t->work.wname[i], "..") == 0) { if(f->f->parent == nil) { e = Exmnt; @@ -316,6 +328,12 @@ } + if(badname(t->work.name)) { + reply(&t->work, &rhdr, Ebadname); + t->busy = 0; + return; + } + path = makepath(f->f, t->work.name); f->fid = create(path, t->work.mode, t->work.perm); free(path);