summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/exportfs/exportfs.c11
-rw-r--r--sys/src/cmd/exportfs/exportsrv.c11
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;