1
1
as reported by Coverity with CIDs 70726, 710564,
1196630, 1269805, 1269803, 1269932
Этот коммит содержится в:
Gilles Gouaillardet 2015-03-10 19:32:01 +09:00
родитель dc0bc756dc
Коммит a69d935d55
2 изменённых файлов: 36 добавлений и 28 удалений

Просмотреть файл

@ -596,7 +596,7 @@ static int component_startup(void)
static void component_shutdown(void) static void component_shutdown(void)
{ {
int i; int i=0;
opal_list_item_t *item; opal_list_item_t *item;
opal_output_verbose(2, orte_oob_base_framework.framework_output, opal_output_verbose(2, orte_oob_base_framework.framework_output,
@ -703,20 +703,26 @@ static int component_set_addr(orte_process_name_t *peer,
found = false; found = false;
for (i=0; NULL != uris[i]; i++) { for (i=0; NULL != uris[i]; i++) {
tcpuri = strdup(uris[i]);
if (NULL == tcpuri) {
opal_output_verbose(2, orte_oob_base_framework.framework_output,
"%s oob:tcp: out of memory",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME));
continue;
}
if (0 == strncmp(uris[i], "tcp:", 4)) { if (0 == strncmp(uris[i], "tcp:", 4)) {
af_family = AF_INET; af_family = AF_INET;
tcpuri = strdup(uris[i]);
host = tcpuri + strlen("tcp://"); host = tcpuri + strlen("tcp://");
} else if (0 == strncmp(uris[i], "tcp6:", 5)) { } else if (0 == strncmp(uris[i], "tcp6:", 5)) {
#if OPAL_ENABLE_IPV6 #if OPAL_ENABLE_IPV6
af_family = AF_INET6; af_family = AF_INET6;
tcpuri = strdup(uris[i]);
host = tcpuri + strlen("tcp6://"); host = tcpuri + strlen("tcp6://");
#else #else
/* we don't support this connection type */ /* we don't support this connection type */
opal_output_verbose(2, orte_oob_base_framework.framework_output, opal_output_verbose(2, orte_oob_base_framework.framework_output,
"%s oob:tcp: address %s not supported", "%s oob:tcp: address %s not supported",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), uris[i]); ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), uris[i]);
free(tcpuri);
continue; continue;
#endif #endif
} else { } else {
@ -724,6 +730,7 @@ static int component_set_addr(orte_process_name_t *peer,
opal_output_verbose(2, orte_oob_base_framework.framework_output, opal_output_verbose(2, orte_oob_base_framework.framework_output,
"%s oob:tcp: ignoring address %s", "%s oob:tcp: ignoring address %s",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), uris[i]); ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), uris[i]);
free(tcpuri);
continue; continue;
} }
@ -739,14 +746,6 @@ static int component_set_addr(orte_process_name_t *peer,
ports++; ports++;
/* split the addrs */ /* split the addrs */
if (NULL == host || 0 == strlen(host)) {
opal_output_verbose(OOB_TCP_DEBUG_CONNECT, orte_oob_base_framework.framework_output,
"FORMAT ERROR IN ADDR: %s",
(NULL == host) ? "NULL" : "ZERO LENGTH");
free(tcpuri);
return ORTE_ERR_BAD_PARAM;
}
/* if this is a tcp6 connection, the first one will have a '[' /* if this is a tcp6 connection, the first one will have a '['
* at the beginning of it, and the last will have a ']' at the * at the beginning of it, and the last will have a ']' at the
* end - we need to remove those extra characters * end - we need to remove those extra characters

Просмотреть файл

@ -14,7 +14,7 @@
* Copyright (c) 2009-2014 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2009-2014 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved. * Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved. * Copyright (c) 2013-2014 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Research Organization for Information Science * Copyright (c) 2014-2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -98,15 +98,6 @@ static int tcp_peer_create_socket(mca_oob_tcp_peer_t* peer)
ORTE_NAME_PRINT(&(peer->name)))); ORTE_NAME_PRINT(&(peer->name))));
peer->sd = socket(AF_INET, SOCK_STREAM, 0); peer->sd = socket(AF_INET, SOCK_STREAM, 0);
/* Set this fd to be close-on-exec so that any subsequent children don't see it */
if (opal_fd_set_cloexec(peer->sd) != OPAL_SUCCESS) {
opal_output(0, "%s unable to set socket to CLOEXEC",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME));
close(peer->sd);
peer->sd = -1;
return ORTE_ERROR;
}
if (peer->sd < 0) { if (peer->sd < 0) {
opal_output(0, "%s-%s tcp_peer_create_socket: socket() failed: %s (%d)\n", opal_output(0, "%s-%s tcp_peer_create_socket: socket() failed: %s (%d)\n",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
@ -116,6 +107,15 @@ static int tcp_peer_create_socket(mca_oob_tcp_peer_t* peer)
return ORTE_ERR_UNREACH; return ORTE_ERR_UNREACH;
} }
/* Set this fd to be close-on-exec so that any subsequent children don't see it */
if (opal_fd_set_cloexec(peer->sd) != OPAL_SUCCESS) {
opal_output(0, "%s unable to set socket to CLOEXEC",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME));
close(peer->sd);
peer->sd = -1;
return ORTE_ERROR;
}
/* setup socket options */ /* setup socket options */
orte_oob_tcp_set_socket_options(peer->sd); orte_oob_tcp_set_socket_options(peer->sd);
@ -575,11 +575,10 @@ static bool retry(mca_oob_tcp_peer_t* peer, int sd, bool fatal)
opal_event_del(&peer->recv_event); opal_event_del(&peer->recv_event);
peer->recv_ev_active = false; peer->recv_ev_active = false;
} }
if (0 < peer->sd) { if (0 <= peer->sd) {
CLOSE_THE_SOCKET(peer->sd); CLOSE_THE_SOCKET(peer->sd);
peer->sd = -1; peer->sd = -1;
} }
CLOSE_THE_SOCKET(peer->sd);
if (OPAL_VALUE1_GREATER == cmpval) { if (OPAL_VALUE1_GREATER == cmpval) {
/* force the other end to retry the connection */ /* force the other end to retry the connection */
peer->state = MCA_OOB_TCP_UNCONNECTED; peer->state = MCA_OOB_TCP_UNCONNECTED;
@ -1034,11 +1033,21 @@ void mca_oob_tcp_peer_dump(mca_oob_tcp_peer_t* peer, const char* msg)
opal_socklen_t addrlen = sizeof(struct sockaddr_storage); opal_socklen_t addrlen = sizeof(struct sockaddr_storage);
opal_socklen_t optlen; opal_socklen_t optlen;
getsockname(peer->sd, (struct sockaddr*)&inaddr, &addrlen); if (getsockname(peer->sd, (struct sockaddr*)&inaddr, &addrlen) < 0) {
snprintf(src, sizeof(src), "%s", opal_net_get_hostname((struct sockaddr*) &inaddr)); opal_output(0, "tcp_peer_dump: getsockname: %s (%d)\n",
getpeername(peer->sd, (struct sockaddr*)&inaddr, &addrlen); strerror(opal_socket_errno),
snprintf(dst, sizeof(dst), "%s", opal_net_get_hostname((struct sockaddr*) &inaddr)); opal_socket_errno);
} else {
snprintf(src, sizeof(src), "%s", opal_net_get_hostname((struct sockaddr*) &inaddr));
}
if (getpeername(peer->sd, (struct sockaddr*)&inaddr, &addrlen) < 0) {
opal_output(0, "tcp_peer_dump: getpeername: %s (%d)\n",
strerror(opal_socket_errno),
opal_socket_errno);
} else {
snprintf(dst, sizeof(dst), "%s", opal_net_get_hostname((struct sockaddr*) &inaddr));
}
if ((flags = fcntl(peer->sd, F_GETFL, 0)) < 0) { if ((flags = fcntl(peer->sd, F_GETFL, 0)) < 0) {
opal_output(0, "tcp_peer_dump: fcntl(F_GETFL) failed: %s (%d)\n", opal_output(0, "tcp_peer_dump: fcntl(F_GETFL) failed: %s (%d)\n",
strerror(opal_socket_errno), strerror(opal_socket_errno),