Upstream-Status: Inappropriate [other] Upstream is not making further releases of this software. Signed-off-by: Scott Garman # Force socket fds to close on exec when used in conjunction with pseudo # Patch origin: Wind River --- nfsd.c | 8 ++++++++ rpcmisc.c | 9 +++++++++ ugidd.c | 8 ++++++++ 3 files changed, 25 insertions(+) --- a/nfsd.c +++ b/nfsd.c @@ -630,6 +630,14 @@ nfsd_nfsproc_create_2(createargs *argp, if (S_ISSOCK(argp->attributes.mode)) { if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) return(nfs_errno()); + /* if there is a pseudo exec mark the socket to be + * closed automatically + */ + { + long f_flags; + f_flags = fcntl(s, F_GETFD); + f_flags = fcntl(s, F_SETFD, f_flags | FD_CLOEXEC); + } sa.sun_family = AF_UNIX; strncpy(sa.sun_path, pathbuf, sizeof(sa.sun_path)); sa.sun_path[sizeof(sa.sun_path)-1] = '\0'; --- a/rpcmisc.c +++ b/rpcmisc.c @@ -197,6 +197,15 @@ makesock(int port, int proto, int socksz Dprintf(L_FATAL, "Could not make a %s socket: %s\n", prot_name, strerror(errno)); + /* if there is a pseudo exec mark the socket to be + * closed automatically + */ + { + long f_flags; + f_flags = fcntl(s, F_GETFD); + f_flags = fcntl(s, F_SETFD, f_flags | FD_CLOEXEC); + } + fcntl(s, FD_CLOEXEC, 1); memset((char *) &sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; --- a/ugidd.c +++ b/ugidd.c @@ -195,6 +195,14 @@ authenticate_1_svc(argp, rqstp) destaddr.sin_port = htons(*argp); if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) goto bad; + /* if there is a pseudo exec mark the socket to be + * closed automatically + */ + { + long f_flags; + f_flags = fcntl(s, F_GETFD); + f_flags = fcntl(s, F_SETFD, f_flags | FD_CLOEXEC); + } setsockopt(s, SOL_SOCKET, SO_LINGER, 0, 0); bzero((char *) &sendaddr, sizeof sendaddr); /* find a reserved port */