RFR 8067105: Socket returned by ServerSocket.accept() is inherited by child process on Windows
Chris Hegarty
chris.hegarty at oracle.com
Wed Dec 17 15:47:17 UTC 2014
A socket connection which is returned by ServerSocket.accept() is
inherited by a child process. The expected behavior is that the socket
connection is not inherited by the child process. This is an oversight
in the original implementation, that only sets HANDLE_FLAG_INHERIT for
newly created sockets.
The native socket returned by ServerSocket.accept() should be configured
so it will not be inherited by a child process,
SetHandleInformation(<HANDLE>, HANDLE_FLAG_INHERIT, FALSE) .
The change is in Java_java_net_DualStackPlainSocketImpl_accept0
diff --git
a/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c
b/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c
--- a/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c
+++ b/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c
@@ -294,6 +294,8 @@
return -1;
}
+ SetHandleInformation((HANDLE)(UINT_PTR)newfd, HANDLE_FLAG_INHERIT,
FALSE);
+
ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port);
isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port);
(*env)->SetObjectArrayElement(env, isaa, 0, isa);
-Chris.
More information about the net-dev
mailing list