summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/unfs-server/unfs-server-2.2beta47/022-add-close-on-exec-descriptors.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/unfs-server/unfs-server-2.2beta47/022-add-close-on-exec-descriptors.patch')
-rw-r--r--meta/recipes-devtools/unfs-server/unfs-server-2.2beta47/022-add-close-on-exec-descriptors.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/meta/recipes-devtools/unfs-server/unfs-server-2.2beta47/022-add-close-on-exec-descriptors.patch b/meta/recipes-devtools/unfs-server/unfs-server-2.2beta47/022-add-close-on-exec-descriptors.patch
new file mode 100644
index 0000000000..011ae74cde
--- /dev/null
+++ b/meta/recipes-devtools/unfs-server/unfs-server-2.2beta47/022-add-close-on-exec-descriptors.patch
@@ -0,0 +1,61 @@
+# 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 */