From 9e6079e573ebcd55bc15b11e1b7178eb84472e6f Mon Sep 17 00:00:00 2001
From: Utz-Uwe Haus <uhaus@hpe.com>
Date: Wed, 17 Aug 2022 13:15:02 +0300
Subject: [PATCH] Fix mstro_endpoint_describe straddr value

This function was only sometimes returning the proper string value of
the endpoint address. On CXI this made reading addresses impossible; on
others if should have been confusing for a long time
---
 maestro/ofi.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/maestro/ofi.c b/maestro/ofi.c
index 07ba3306..1ab77361 100644
--- a/maestro/ofi.c
+++ b/maestro/ofi.c
@@ -1211,25 +1211,28 @@ mstro_endpoint_describe(const struct mstro_endpoint *ep)
   char strbuf[EP_DESC_BUF_MAX];
   char addrbuf[EP_DESC_BUF_MAX];
 
-  ep_name_buf[0]='\0';
+  strncpy(ep_name_buf, "(unprintable)", EP_DESC_BUF_MAX);
 
-  size=0;
-  ret = fi_getname(&ep->ep->fid,NULL,&size);
-  if(ret!=-FI_ETOOSMALL) {
+  /* first: fetch address */
+  size=EP_DESC_BUF_MAX;
+  ret = fi_getname(&ep->ep->fid,addrbuf,&size);
+  DEBUG("addrbuf len %zu, ret %d\n", size, ret);
+  if(ret<0 && ret!=-FI_ETOOSMALL) {
     ERR("fi_getname in EP describe failed: %d (%s)\n", ret, fi_strerror(-ret));
     goto DONE;
   }
-  assert(size<EP_DESC_BUF_MAX);
-  fi_getname(&ep->ep->fid,addrbuf,&size);
- 
+
+  /* now translate to string */
+  size = EP_DESC_BUF_MAX;
+  /* may truncate but will 0-terminate the strbuf */
   fi_av_straddr(ep->av, addrbuf, strbuf, &size);
-  assert(size<EP_DESC_BUF_MAX);
+  DEBUG("strbuf len %zu, val %s\n", size, strbuf);
 
   size=snprintf(ep_name_buf, EP_DESC_BUF_MAX,
                 "OFI EP prov %s name %s straddr %s",
                 ep->fi->fabric_attr->prov_name,
                 ep->fi->fabric_attr->name, strbuf);
-  assert(size<1024);
+  assert(size<EP_DESC_BUF_MAX);
 DONE:
   return ep_name_buf;
 }
-- 
GitLab