diff --git a/include/spdk/nvmf.h b/include/spdk/nvmf.h index 45915c302..c410eb809 100644 --- a/include/spdk/nvmf.h +++ b/include/spdk/nvmf.h @@ -128,7 +128,7 @@ struct spdk_nvmf_subsystem_allowed_listener { struct spdk_nvmf_subsystem { uint32_t id; uint32_t lcore; - char subnqn[SPDK_NVMF_NQN_MAX_LEN]; + char subnqn[SPDK_NVMF_NQN_MAX_LEN + 1]; enum spdk_nvmf_subsystem_mode mode; enum spdk_nvmf_subtype subtype; bool is_removed; diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index d9bb4fee5..97e7c8540 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -1109,7 +1109,7 @@ nvme_rdma_discovery_probe(struct spdk_nvmf_discovery_log_page_entry *entry, trid.adrfam = entry->adrfam; /* Ensure that subnqn is null terminated. */ - end = memchr(entry->subnqn, '\0', SPDK_NVMF_NQN_MAX_LEN); + end = memchr(entry->subnqn, '\0', SPDK_NVMF_NQN_MAX_LEN + 1); if (!end) { SPDK_ERRLOG("Discovery entry SUBNQN is not null terminated\n"); return; diff --git a/lib/nvmf/request.c b/lib/nvmf/request.c index a1122fda3..e8fb885ac 100644 --- a/lib/nvmf/request.c +++ b/lib/nvmf/request.c @@ -146,14 +146,14 @@ nvmf_process_connect(struct spdk_nvmf_request *req) } /* Ensure that subnqn and hostnqn are null terminated */ - end = memchr(data->subnqn, '\0', SPDK_NVMF_NQN_MAX_LEN); + end = memchr(data->subnqn, '\0', SPDK_NVMF_NQN_MAX_LEN + 1); if (!end) { SPDK_ERRLOG("Connect SUBNQN is not null terminated\n"); INVALID_CONNECT_DATA(subnqn); return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } - end = memchr(data->hostnqn, '\0', SPDK_NVMF_NQN_MAX_LEN); + end = memchr(data->hostnqn, '\0', SPDK_NVMF_NQN_MAX_LEN + 1); if (!end) { SPDK_ERRLOG("Connect HOSTNQN is not null terminated\n"); INVALID_CONNECT_DATA(hostnqn); diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index f1ed8ebaa..48c933fb2 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -174,8 +174,8 @@ spdk_nvmf_valid_nqn(const char *nqn) size_t len; len = strlen(nqn); - if (len >= SPDK_NVMF_NQN_MAX_LEN) { - SPDK_ERRLOG("Invalid NQN \"%s\": length %zu > max %d\n", nqn, len, SPDK_NVMF_NQN_MAX_LEN - 1); + if (len > SPDK_NVMF_NQN_MAX_LEN) { + SPDK_ERRLOG("Invalid NQN \"%s\": length %zu > max %d\n", nqn, len, SPDK_NVMF_NQN_MAX_LEN); return false; } diff --git a/test/lib/nvmf/subsystem/subsystem_ut.c b/test/lib/nvmf/subsystem/subsystem_ut.c index 1a1450487..ccb169726 100644 --- a/test/lib/nvmf/subsystem/subsystem_ut.c +++ b/test/lib/nvmf/subsystem/subsystem_ut.c @@ -218,9 +218,9 @@ nvmf_test_create_subsystem(void) /* Longest valid name */ strncpy(nqn, "nqn.2016-06.io.spdk:", sizeof(nqn)); - memset(nqn + strlen(nqn), 'a', 222 - strlen(nqn)); - nqn[222] = '\0'; - CU_ASSERT(strlen(nqn) == 222); + memset(nqn + strlen(nqn), 'a', 223 - strlen(nqn)); + nqn[223] = '\0'; + CU_ASSERT(strlen(nqn) == 223); subsystem = spdk_nvmf_create_subsystem(nqn, SPDK_NVMF_SUBTYPE_NVME, NVMF_SUBSYSTEM_MODE_DIRECT, NULL, NULL, NULL); SPDK_CU_ASSERT_FATAL(subsystem != NULL); @@ -229,9 +229,9 @@ nvmf_test_create_subsystem(void) /* Name that is one byte longer than allowed */ strncpy(nqn, "nqn.2016-06.io.spdk:", sizeof(nqn)); - memset(nqn + strlen(nqn), 'a', 223 - strlen(nqn)); - nqn[223] = '\0'; - CU_ASSERT(strlen(nqn) == 223); + memset(nqn + strlen(nqn), 'a', 224 - strlen(nqn)); + nqn[224] = '\0'; + CU_ASSERT(strlen(nqn) == 224); subsystem = spdk_nvmf_create_subsystem(nqn, SPDK_NVMF_SUBTYPE_NVME, NVMF_SUBSYSTEM_MODE_DIRECT, NULL, NULL, NULL); CU_ASSERT(subsystem == NULL);