From ce87e8c9714e55e7df284128c0e2f90882d6305b Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Thu, 12 Mar 2026 16:01:48 +0100 Subject: [PATCH 1/2] fabrics: sanitize FC traddr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improve traddr sanitization and replace “,” with “:” as the separator. (cherry picked from 14828a107) Signed-off-by: Daniel Wagner --- src/nvme/fabrics.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c index 3c4997d1..476b4bd9 100644 --- a/src/nvme/fabrics.c +++ b/src/nvme/fabrics.c @@ -1284,6 +1284,17 @@ static void sanitize_discovery_log_entry(struct nvmf_disc_log_entry *e) { strchomp(e->trsvcid, sizeof(e->trsvcid)); strchomp(e->traddr, sizeof(e->traddr)); + + /* + * Report traddr always in 'nn-0x:pn-0x' format, but some discovery logs + * provide 'nn-0x,pn-0x'. + */ + if (e->trtype == NVMF_TRTYPE_FC) { + char *comma = strchr(e->traddr, ','); + + if (comma) + *comma = ':'; + } } int nvmf_get_discovery_log(nvme_ctrl_t c, struct nvmf_discovery_log **logp, From 695ec0cf03a71f407bd3a4644f80a8f557c77f3a Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Thu, 9 Apr 2026 18:30:51 +0200 Subject: [PATCH 2/2] fabrics: issue a warning on invalid traddr format Report that the traddr is invalid instead silently fix it only. (cherry picked from 05b3f6b0930e) Signed-off-by: Daniel Wagner --- src/nvme/fabrics.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c index 476b4bd9..a6f2cc21 100644 --- a/src/nvme/fabrics.c +++ b/src/nvme/fabrics.c @@ -1280,7 +1280,8 @@ static struct nvmf_discovery_log *nvme_discovery_log( return NULL; } -static void sanitize_discovery_log_entry(struct nvmf_disc_log_entry *e) +static void sanitize_discovery_log_entry(nvme_root_t r, + struct nvmf_disc_log_entry *e) { strchomp(e->trsvcid, sizeof(e->trsvcid)); strchomp(e->traddr, sizeof(e->traddr)); @@ -1292,8 +1293,11 @@ static void sanitize_discovery_log_entry(struct nvmf_disc_log_entry *e) if (e->trtype == NVMF_TRTYPE_FC) { char *comma = strchr(e->traddr, ','); - if (comma) + if (comma) { + nvme_msg(r, LOG_WARNING, + "invalid traddr separator ',' instead ':', fixing it"); *comma = ':'; + } } } @@ -1314,13 +1318,17 @@ int nvmf_get_discovery_log(nvme_ctrl_t c, struct nvmf_discovery_log **logp, struct nvmf_discovery_log *nvmf_get_discovery_wargs(struct nvme_get_discovery_args *args) { struct nvmf_discovery_log *log; + nvme_ctrl_t c; + nvme_root_t r; log = nvme_discovery_log(args); if (!log) return NULL; + c = args->c; + r = c->s && c->s->h ? c->s->h->r : NULL; for (int i = 0; i < le64_to_cpu(log->numrec); i++) - sanitize_discovery_log_entry(&log->entries[i]); + sanitize_discovery_log_entry(r, &log->entries[i]); return log; }