Bug 1455446: Set CLOEXEC on socket FDs. r?dragana draft
authorKris Maglione <maglione.k@gmail.com>
Thu, 19 Apr 2018 14:23:25 -0700
changeset 785316 af41f47a6da2d206104aad7f9ec194215eb630d5
parent 785210 5524e587eff281b0f397d17ccd38c8bb26fb221e
push id107187
push usermaglione.k@gmail.com
push dateThu, 19 Apr 2018 21:31:31 +0000
reviewersdragana
bugs1455446
milestone61.0a1
Bug 1455446: Set CLOEXEC on socket FDs. r?dragana MozReview-Commit-ID: L617m03Z3RS
netwerk/base/PollableEvent.cpp
netwerk/base/nsSocketTransport2.cpp
netwerk/base/nsUDPSocket.cpp
--- a/netwerk/base/PollableEvent.cpp
+++ b/netwerk/base/PollableEvent.cpp
@@ -98,21 +98,23 @@ static bool NewTCPSocketPair(PRFileDesc 
   }
 
   if (PR_Connect(writer, &writerAddr, PR_INTERVAL_NO_TIMEOUT) == PR_FAILURE) {
     if ((PR_GetError() != PR_IN_PROGRESS_ERROR) ||
         (PR_ConnectContinue(writer, PR_POLL_WRITE) == PR_FAILURE)) {
       goto failed;
     }
   }
+  PR_SetFDInheritable(writer, false);
 
   reader = PR_Accept(listener, &listenAddr, PR_MillisecondsToInterval(200));
   if (!reader) {
     goto failed;
   }
+  PR_SetFDInheritable(reader, false);
   if (aSetRecvBuff) {
     PR_SetSocketOption(reader, &recvBufferOpt);
   }
   PR_SetSocketOption(reader, &nodelayOpt);
   PR_SetSocketOption(reader, &noblockOpt);
   PR_Close(listener);
 
   fd[0] = reader;
--- a/netwerk/base/nsSocketTransport2.cpp
+++ b/netwerk/base/nsSocketTransport2.cpp
@@ -1529,16 +1529,19 @@ nsSocketTransport::InitiateSocket()
             SOCKET_LOG(("nsSocketTransport::InitiateSocket TCP Fast Open "
                         "started [this=%p]\n", this));
         }
     }
 
     bool connectCalled = true; // This is only needed for telemetry.
     status = PR_Connect(fd, &prAddr, NS_SOCKET_CONNECT_TIMEOUT);
     PRErrorCode code = PR_GetError();
+    if (status == PR_SUCCESS) {
+        PR_SetFDInheritable(fd, false);
+    }
     if ((status == PR_SUCCESS) && tfo) {
         {
             MutexAutoLock lock(mLock);
             mFDFastOpenInProgress = true;
         }
         SOCKET_LOG(("Using TCP Fast Open."));
         rv = mFastOpenCallback->StartFastOpen();
         if (NS_FAILED(rv)) {
--- a/netwerk/base/nsUDPSocket.cpp
+++ b/netwerk/base/nsUDPSocket.cpp
@@ -722,16 +722,17 @@ nsUDPSocket::Connect(const NetAddr *aAdd
   PRNetAddr prAddr;
   memset(&prAddr, 0, sizeof(prAddr));
   NetAddrToPRNetAddr(aAddr, &prAddr);
 
   if (PR_Connect(mFD, &prAddr, PR_INTERVAL_NO_WAIT) != PR_SUCCESS) {
     NS_WARNING("Cannot PR_Connect");
     return NS_ERROR_FAILURE;
   }
+  PR_SetFDInheritable(mFD, false);
 
   // get the resulting socket address, which may have been updated.
   PRNetAddr addr;
   if (PR_GetSockName(mFD, &addr) != PR_SUCCESS)
   {
     NS_WARNING("cannot get socket name");
     return NS_ERROR_FAILURE;
   }