8073542: File Leak in jdk/src/java/base/unix/native/libnet/PlainDatagramSocketImpl.c

Ensure that file descriptor is properly closed if setsockopt fails.

Reviewed-by: chegar, igerasim
This commit is contained in:
Vyom Tewari 2015-09-17 17:33:00 +02:00 committed by Daniel Fuchs
parent d9f30b845c
commit 681e6b478b

View File

@ -955,17 +955,23 @@ Java_java_net_PlainDatagramSocketImpl_datagramSocketCreate(JNIEnv *env,
(char *)&arg, sizeof(arg)) < 0) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
strerror(errno));
close(fd);
return;
}
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF,
(char *)&arg, sizeof(arg)) < 0) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
strerror(errno));
close(fd);
return;
}
#endif /* __APPLE__ */
setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char*) &t, sizeof(int));
if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char*) &t, sizeof (int)) < 0) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", strerror(errno));
close(fd);
return;
}
#if defined(__linux__)
arg = 0;
@ -986,8 +992,12 @@ Java_java_net_PlainDatagramSocketImpl_datagramSocketCreate(JNIEnv *env,
*/
if (domain == AF_INET6) {
int ttl = 1;
setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char *)&ttl,
sizeof(ttl));
if (setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char *) &ttl,
sizeof (ttl)) < 0) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", strerror(errno));
close(fd);
return;
}
}
#endif /* __linux__ */