Skip to content

Commit 568c5b8

Browse files
authored
Merge pull request #562 from igaw/sanitize-disc-log
fabrics: Always sanitize discovery log entries
2 parents 20865a4 + 6294cad commit 568c5b8

1 file changed

Lines changed: 48 additions & 7 deletions

File tree

src/nvme/fabrics.c

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -683,8 +683,6 @@ nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h,
683683
switch (e->adrfam) {
684684
case NVMF_ADDR_FAMILY_IP4:
685685
case NVMF_ADDR_FAMILY_IP6:
686-
strchomp(e->traddr, NVMF_TRADDR_SIZE - 1);
687-
strchomp(e->trsvcid, NVMF_TRSVCID_SIZE - 1);
688686
traddr = e->traddr;
689687
trsvcid = e->trsvcid;
690688
break;
@@ -699,7 +697,6 @@ nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h,
699697
case NVMF_TRTYPE_FC:
700698
switch (e->adrfam) {
701699
case NVMF_ADDR_FAMILY_FC:
702-
strchomp(e->traddr, NVMF_TRADDR_SIZE - 1);
703700
traddr = e->traddr;
704701
break;
705702
default:
@@ -711,7 +708,6 @@ nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h,
711708
}
712709
break;
713710
case NVMF_TRTYPE_LOOP:
714-
strchomp(e->traddr, NVMF_TRADDR_SIZE - 1);
715711
traddr = strlen(e->traddr) ? e->traddr : NULL;
716712
break;
717713
default:
@@ -884,9 +880,37 @@ static struct nvmf_discovery_log *nvme_discovery_log(nvme_ctrl_t c,
884880
return NULL;
885881
}
886882

883+
static void sanitize_discovery_log_entry(struct nvmf_disc_log_entry *e)
884+
{
885+
switch (e->trtype) {
886+
case NVMF_TRTYPE_RDMA:
887+
case NVMF_TRTYPE_TCP:
888+
switch (e->adrfam) {
889+
case NVMF_ADDR_FAMILY_IP4:
890+
case NVMF_ADDR_FAMILY_IP6:
891+
strchomp(e->traddr, NVMF_TRADDR_SIZE - 1);
892+
strchomp(e->trsvcid, NVMF_TRSVCID_SIZE - 1);
893+
break;
894+
}
895+
break;
896+
case NVMF_TRTYPE_FC:
897+
switch (e->adrfam) {
898+
case NVMF_ADDR_FAMILY_FC:
899+
strchomp(e->traddr, NVMF_TRADDR_SIZE - 1);
900+
break;
901+
}
902+
break;
903+
case NVMF_TRTYPE_LOOP:
904+
strchomp(e->traddr, NVMF_TRADDR_SIZE - 1);
905+
break;
906+
}
907+
}
908+
887909
int nvmf_get_discovery_log(nvme_ctrl_t c, struct nvmf_discovery_log **logp,
888910
int max_retries)
889911
{
912+
struct nvmf_discovery_log *log;
913+
890914
struct nvme_get_log_args args = {
891915
.args_size = sizeof(args),
892916
.fd = nvme_ctrl_get_fd(c),
@@ -903,12 +927,22 @@ int nvmf_get_discovery_log(nvme_ctrl_t c, struct nvmf_discovery_log **logp,
903927
.rae = false,
904928
.ot = false,
905929
};
906-
*logp = nvme_discovery_log(c, &args, max_retries);
907-
return *logp ? 0 : -1;
930+
931+
log = nvme_discovery_log(c, &args, max_retries);
932+
if (!log)
933+
return -1;
934+
935+
for (int i = 0; i < le64_to_cpu(log->numrec); i++)
936+
sanitize_discovery_log_entry(&log->entries[i]);
937+
938+
*logp = log;
939+
return 0;
908940
}
909941

910942
struct nvmf_discovery_log *nvmf_get_discovery_wargs(struct nvme_get_discovery_args *args)
911943
{
944+
struct nvmf_discovery_log *log;
945+
912946
struct nvme_get_log_args _args = {
913947
.args_size = sizeof(_args),
914948
.fd = nvme_ctrl_get_fd(args->c),
@@ -926,7 +960,14 @@ struct nvmf_discovery_log *nvmf_get_discovery_wargs(struct nvme_get_discovery_ar
926960
.ot = false,
927961
};
928962

929-
return nvme_discovery_log(args->c, &_args, args->max_retries);
963+
log = nvme_discovery_log(args->c, &_args, args->max_retries);
964+
if (!log)
965+
return NULL;
966+
967+
for (int i = 0; i < le64_to_cpu(log->numrec); i++)
968+
sanitize_discovery_log_entry(&log->entries[i]);
969+
970+
return log;
930971
}
931972

932973
#define PATH_UUID_IBM "/proc/device-tree/ibm,partition-uuid"

0 commit comments

Comments
 (0)