8073542: File Leak in jdk/src/java/base/unix/native/libnet/PlainDatagramSocketImpl.c
Summary: ensure that file descriptor is properly closed if setsockopt fails.
Reviewed-by: chegar, igerasim
Contributed-by: vyom.tewari@oracle.com
--- a/jdk/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c Thu Sep 17 10:37:39 2015 +0800
+++ b/jdk/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c Thu Sep 17 17:33:00 2015 +0200
@@ -955,17 +955,23 @@
(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 @@
*/
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__ */