diff --git a/maestro/ofi.c b/maestro/ofi.c index be9651a411089b69293245fa7fbea4d9bee9a329..8778bc1341f9d2ffa1540f4897bc2eb577186f07 100644 --- a/maestro/ofi.c +++ b/maestro/ofi.c @@ -1002,6 +1002,7 @@ BAILOUT: const char * mstro_ep_desc_describe(mstro_endpoint_descriptor desc) { + int s; /* FIXME: May need locking */ if(desc==NULL) return "(null)"; @@ -1012,16 +1013,26 @@ mstro_ep_desc_describe(mstro_endpoint_descriptor desc) char *service = buf+2*MSTRO_EP_DESC_STRMAX; switch(desc->type) { case MSTRO_EP_OFI_IN4: - getnameinfo((struct sockaddr*)&desc->in4, sizeof(struct sockaddr_in), + s=getnameinfo((struct sockaddr*)&desc->in4, sizeof(struct sockaddr_in), host, MSTRO_EP_DESC_STRMAX, service, MSTRO_EP_DESC_STRMAX, NI_NUMERICHOST | NI_NUMERICSERV); + if(s!=0) { + ERR("Failed to obtain IN4 address: %d (%s)\n", + errno, strerror(errno)); + abort(); + } break; case MSTRO_EP_OFI_IN6: - getnameinfo((struct sockaddr*)&desc->in6, sizeof(struct sockaddr_in6), + s=getnameinfo((struct sockaddr*)&desc->in6, sizeof(struct sockaddr_in6), host, MSTRO_EP_DESC_STRMAX, service, MSTRO_EP_DESC_STRMAX, NI_NUMERICHOST | NI_NUMERICSERV); + if(s!=0) { + ERR("Failed to obtain IN6 address: %d (%s)\n", + errno, strerror(errno)); + abort(); + } break; #ifdef HAVE_IB /* case FI_SOCKADDR_IB: */ @@ -1030,22 +1041,38 @@ mstro_ep_desc_describe(mstro_endpoint_descriptor desc) case MSTRO_EP_OFI_PSMX: case MSTRO_EP_OFI_BGQ: case MSTRO_EP_OFI_MLX: - snprintf(host, MSTRO_EP_DESC_STRMAX, - "[%" PRIu64 "]", desc->psmx); + s=snprintf(host, MSTRO_EP_DESC_STRMAX, + "[%" PRIu64 "]", desc->psmx); + if(s<0 || s>MSTRO_EP_DESC_STRMAX) { + ERR("Failed to write u64 address: %d (errno %d = %s)\n", + s, errno, strerror(errno)); + abort(); + } service[0]='\0'; break; case MSTRO_EP_OFI_PSMX2: - snprintf(host, MSTRO_EP_DESC_STRMAX, + s=snprintf(host, MSTRO_EP_DESC_STRMAX, "[%"PRIu64":%"PRIu64"]", desc->psmx2[0], desc->psmx2[1]); + if(s<0 || s>MSTRO_EP_DESC_STRMAX) { + ERR("Failed to write psmx2 address: %d (errno %d = %s)\n", + s, errno, strerror(errno)); + abort(); + } service[0]='\0'; break; case MSTRO_EP_OFI_GNI: - snprintf(host, MSTRO_EP_DESC_STRMAX, + s=snprintf(host, MSTRO_EP_DESC_STRMAX, "[%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 "/%s]", desc->gni[0], desc->gni[1], desc->gni[2], desc->gni[3], desc->gni[4], desc->gni[5], desc->oob_cookie); + if(s<0 || s>MSTRO_EP_DESC_STRMAX) { + ERR("Failed to write GNI address: %d (errno %d = %s)\n", + s, errno, strerror(errno)); + abort(); + } + service[0]='\0'; break; case MSTRO_EP_OFI_STR: strcpy(host,desc->str); @@ -1055,9 +1082,14 @@ mstro_ep_desc_describe(mstro_endpoint_descriptor desc) strcpy(host, "FIXME"); service[0]='\0'; } - snprintf(buf, MSTRO_EP_DESC_STRMAX, "EPD type %d (%s) addr %s:%s", - desc->type, mstro_ep_descriptor_names[desc->type], - host, service); + s=snprintf(buf, MSTRO_EP_DESC_STRMAX, "EPD type %d (%s) addr %s:%s", + desc->type, mstro_ep_descriptor_names[desc->type], + host, service); + if(s<0 || s>MSTRO_EP_DESC_STRMAX) { + ERR("Failed to write endpoint description: %d (errno %d = %s)\n", + s, errno, strerror(errno)); + abort(); + } desc->name = buf; }