diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 3d56bdf79..e68a6fa93 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -328,6 +328,11 @@ spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bd uint32_t i; int rc; + if (nsid == SPDK_NVME_GLOBAL_NS_TAG) { + SPDK_ERRLOG("Invalid NSID %" PRIu32 "\n", nsid); + return 0; + } + if (nsid > subsystem->max_nsid || (nsid == 0 && subsystem->num_allocated_nsid == subsystem->max_nsid)) { struct spdk_nvmf_ns *new_ns_array; diff --git a/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c b/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c index abda3e2ec..1148e28de 100644 --- a/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c +++ b/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c @@ -189,6 +189,11 @@ test_spdk_nvmf_subsystem_add_ns(void) CU_ASSERT(nsid == 0); CU_ASSERT(subsystem.max_nsid == 5); + /* Request 0xFFFFFFFF (invalid NSID, reserved for broadcast) */ + nsid = spdk_nvmf_subsystem_add_ns(&subsystem, &bdev2, 0xFFFFFFFF); + CU_ASSERT(nsid == 0); + CU_ASSERT(subsystem.max_nsid == 5); + free(subsystem.ns); }