Add FD_CLOEXEC flag for sockets, /dev/mem and LAD pipes
[ipc/ipcdev.git] / linux / src / utils / LAD_client.c
index 7d6fee3cc95aa340e853935fbe3189c15917b50d..a5c7e4c871c4b8fd10ef1e73d889a130ba84f54a 100644 (file)
@@ -38,6 +38,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
@@ -119,6 +120,7 @@ LAD_Status LAD_connect(LAD_ClientHandle * handle)
     double delta;
     Int assignedId;
     FILE * filePtr;
+    int flags;
     Int n;
     Int pid;
     struct LAD_CommandObj cmd;
@@ -178,6 +180,12 @@ LAD_Status LAD_connect(LAD_ClientHandle * handle)
         }
     }
 
+    /* make sure FIFO fd doesn't exist for 'fork() -> exec*()'ed child */
+    flags = fcntl(fileno(filePtr), F_GETFD);
+    if (flags != -1) {
+        fcntl(fileno(filePtr), F_SETFD, flags | FD_CLOEXEC);
+    }
+
     /* now get LAD's response to the connection request */
     n = fread(&rsp, LAD_RESPONSELENGTH, 1, filePtr);
 
@@ -380,6 +388,8 @@ static LAD_Status initWrappers(Void)
  */
 static Bool openCommandFIFO(Void)
 {
+    int flags;
+
     /* open a file for writing to FIFO */
     commandFIFOFilePtr = fopen(commandFIFOFileName, "w");
 
@@ -389,5 +399,11 @@ static Bool openCommandFIFO(Void)
         return(FALSE);
     }
 
+    /* make sure FIFO fd doesn't exist for 'fork() -> exec*()'ed child */
+    flags = fcntl(fileno(commandFIFOFilePtr), F_GETFD);
+    if (flags != -1) {
+        fcntl(fileno(commandFIFOFilePtr), F_SETFD, flags | FD_CLOEXEC);
+    }
+
     return(TRUE);
 }