8320168: handle setsocktopt return values

Reviewed-by: lucy, alanb, vtewari
This commit is contained in:
Matthias Baesken 2023-11-20 11:28:41 +00:00
parent 6c5e15c1a2
commit db1d82347b
8 changed files with 53 additions and 15 deletions

View file

@ -263,7 +263,11 @@ tcp_ping4(JNIEnv *env, SOCKETADDRESS *sa, SOCKETADDRESS *netif, jint timeout,
// set TTL
if (ttl > 0) {
setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
if (setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)) < 0) {
NET_ThrowNew(env, errno, "setsockopt IP_TTL failed");
close(fd);
return JNI_FALSE;
}
}
// A network interface was specified, so let's bind to it.
@ -349,11 +353,19 @@ ping4(JNIEnv *env, jint fd, SOCKETADDRESS *sa, SOCKETADDRESS *netif,
struct timeval tv = { 0, 0 };
const size_t plen = ICMP_MINLEN + sizeof(tv);
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)) < 0) {
NET_ThrowNew(env, errno, "setsockopt SO_RCVBUF failed");
close(fd);
return JNI_FALSE;
}
// sets the ttl (max number of hops)
if (ttl > 0) {
setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
if (setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)) < 0) {
NET_ThrowNew(env, errno, "setsockopt IP_TTL failed");
close(fd);
return JNI_FALSE;
}
}
// a specific interface was specified, so let's bind the socket

View file

@ -463,12 +463,16 @@ tcp_ping6(JNIEnv *env, SOCKETADDRESS *sa, SOCKETADDRESS *netif, jint timeout,
// set TTL
if (ttl > 0) {
setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl));
if (setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl)) < 0) {
NET_ThrowNew(env, errno, "setsockopt IPV6_UNICAST_HOPS failed");
close(fd);
return JNI_FALSE;
}
}
// A network interface was specified, so let's bind to it.
if (netif != NULL) {
if (bind(fd, &netif->sa, sizeof(struct sockaddr_in6)) <0) {
if (bind(fd, &netif->sa, sizeof(struct sockaddr_in6)) < 0) {
NET_ThrowNew(env, errno, "Can't bind socket");
close(fd);
return JNI_FALSE;
@ -557,11 +561,19 @@ ping6(JNIEnv *env, jint fd, SOCKETADDRESS *sa, SOCKETADDRESS *netif,
setsockopt(fd, SOL_RAW, IPV6_CHECKSUM, &csum_offset, sizeof(int));
#endif
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)) < 0) {
NET_ThrowNew(env, errno, "setsockopt SO_RCVBUF failed");
close(fd);
return JNI_FALSE;
}
// sets the ttl (max number of hops)
if (ttl > 0) {
setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl));
if (setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl)) < 0) {
NET_ThrowNew(env, errno, "setsockopt IPV6_UNICAST_HOPS failed");
close(fd);
return JNI_FALSE;
}
}
// a specific interface was specified, so let's bind the socket

View file

@ -536,7 +536,9 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg,
}
if (sotype == SOCK_DGRAM) {
setsockopt(fd, level, SO_REUSEPORT, arg, len);
if (setsockopt(fd, level, SO_REUSEPORT, arg, len) < 0) {
return -1;
}
}
}
#endif