aux/listen: do not redirect stderr (fd 2) of the listener to the network connection

Charles Forsyth described the problem below in:

http://9fans.net/archive/2013/04/190

In a few cases, the kernel will use pprint to put a diagnostic on the
standard error (file descriptor 2). One of those is a warning that the
process has used more than 100 file descriptors. That message is possibly
obsolete and could be removed, but there are others, such as notifying an
uncaught trap that are probably helpful to make visible. In any case, as
things stand, a busy exportfs might have many file descriptors open,
provoking the diagnostic. Unfortunately, aux/listen and aux/listen1 connect
file descriptor 2 to the incoming network connection. If the connection's
protocol is not a simple, unstructured, textual one, diagnostics on the
standard error will cause confusion, in particular to devmnt.c if 9p is used.

/rc/bin/service files that start applications that run special protocols
might want to redirect file descriptor 2; alternatively, perhaps aux/listen
shouldn't redirect fd 2 by default: the few commands that do connect the remote
user to shells, or equivalent, including telnetd and sshd could dup 1 to 2
when that was sensible.
This commit is contained in:
cinap_lenrek 2013-04-20 21:42:20 +02:00
parent 4198bb566e
commit cbe11fc1c2
2 changed files with 2 additions and 2 deletions

View file

@ -592,7 +592,7 @@ newcall(int fd, char *proto, char *dir, Service *s)
bind(data, "/dev/cons", MREPL);
dup(fd, 0);
dup(fd, 1);
dup(fd, 2);
/* dup(fd, 2); keep stderr */
close(fd);
/*

View file

@ -142,7 +142,7 @@ main(int argc, char **argv)
bind(data, "/dev/cons", MREPL);
dup(fd, 0);
dup(fd, 1);
dup(fd, 2);
/* dup(fd, 2); keep stderr */
close(fd);
exec(argv[1], argv+1);
if(argv[1][0] != '/')