67 lines
1.9 KiB
Diff
67 lines
1.9 KiB
Diff
Upstream-Status: Inappropriate [other]
|
|
Upstream is not making further releases of this software.
|
|
|
|
Signed-off-by: Scott Garman <scott.a.garman@intel.com>
|
|
|
|
# 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 */
|