]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Make Windows sockets non-inheritable
authorOwen Dunn <owen@greenend.org.uk>
Sun, 19 Feb 2017 13:49:12 +0000 (13:49 +0000)
committerOwen Dunn <owen@greenend.org.uk>
Sun, 19 Feb 2017 14:04:58 +0000 (14:04 +0000)
When we create a socket with socket() (in try_connect, sk_newlistener, and
ipv4_is_local_addr) also call SetHandleInformation to disable handle
inheritance for this socket.  This fixes dup-sessions-dont-close.

windows/winnet.c

index fb121e3f7ea681a9cf2645a5aa063c4a91429bdb..9875323744cda7ffbdf2377061231176debc848a 100644 (file)
@@ -774,6 +774,8 @@ static int ipv4_is_local_addr(struct in_addr addr)
        SOCKET s = p_socket(AF_INET, SOCK_DGRAM, 0);
        DWORD retbytes;
 
+       SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0);
+
        if (p_WSAIoctl &&
            p_WSAIoctl(s, SIO_GET_INTERFACE_LIST, NULL, 0,
                       local_interfaces, sizeof(local_interfaces),
@@ -1022,6 +1024,8 @@ static DWORD try_connect(Actual_Socket sock)
        goto ret;
     }
 
+       SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0);
+
     if (sock->oobinline) {
        BOOL b = TRUE;
        p_setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (void *) &b, sizeof(b));
@@ -1303,6 +1307,8 @@ Socket sk_newlistener(const char *srcaddr, int port, Plug plug,
        return (Socket) ret;
     }
 
+       SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0);
+
     ret->oobinline = 0;
 
     p_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char *)&on, sizeof(on));