diff options
| -rw-r--r-- | sys/src/cmd/exportfs/exportfs.c | 11 | ||||
| -rw-r--r-- | sys/src/cmd/exportfs/exportsrv.c | 11 |
2 files changed, 13 insertions, 9 deletions
diff --git a/sys/src/cmd/exportfs/exportfs.c b/sys/src/cmd/exportfs/exportfs.c index b618369b4..0ac79edd0 100644 --- a/sys/src/cmd/exportfs/exportfs.c +++ b/sys/src/cmd/exportfs/exportfs.c @@ -288,7 +288,10 @@ main(int argc, char **argv) fatal("open ack write"); ini = initial; - if (readn(netfd, initial, sizeof(initial)) < sizeof(initial)) + n = readn(netfd, initial, sizeof(initial)); + if (n == 0) + fatal(nil); /* port scan or spurious open/close on exported /srv file (unmount) */ + if (n < sizeof(initial)) fatal("can't read initial string: %r"); if (memcmp(ini, "impo", 4) == 0) { @@ -844,10 +847,10 @@ fatal(char *s, ...) for(m = Proclist; m; m = m->next) postnote(PNPROC, m->pid, "kill"); - DEBUG(DFD, "%s\n", buf); - if (s) + if (s) { + DEBUG(DFD, "%s\n", buf); sysfatal("%s", buf); /* caution: buf could contain '%' */ - else + } else exits(nil); } diff --git a/sys/src/cmd/exportfs/exportsrv.c b/sys/src/cmd/exportfs/exportsrv.c index 7e8d836ff..ea2d77ab8 100644 --- a/sys/src/cmd/exportfs/exportsrv.c +++ b/sys/src/cmd/exportfs/exportsrv.c @@ -584,8 +584,10 @@ openmount(int sfd) if(pipe(p) < 0) return -1; - switch(rfork(RFPROC|RFMEM|RFNOWAIT|RFNAMEG|RFFDG)){ + switch(rfork(RFPROC|RFMEM|RFNOWAIT|RFNAMEG|RFFDG|RFREND)){ case -1: + close(p[0]); + close(p[1]); return -1; default: @@ -597,6 +599,9 @@ openmount(int sfd) break; } + dup(p[0], 0); + dup(p[0], 1); + close(p[0]); close(p[1]); arg[0] = "exportfs"; @@ -606,10 +611,6 @@ openmount(int sfd) arg[2] = mbuf; arg[3] = nil; - close(0); - close(1); - dup(p[0], 0); - dup(p[0], 1); exec("/bin/exportfs", arg); _exits("whoops: exec failed"); return -1; |
