]> www.infradead.org Git - nvme.git/commitdiff
nvmet: replace strncpy with strscpy
authorMarcelo Moreira <marcelomoreira1905@gmail.com>
Thu, 3 Apr 2025 23:23:56 +0000 (20:23 -0300)
committerChristoph Hellwig <hch@lst.de>
Tue, 22 Apr 2025 08:08:32 +0000 (10:08 +0200)
The strncpy() function is deprecated for NUL-terminated strings as
explained in the "strncpy() on NUL-terminated strings" section of
Documentation/process/deprecated.rst.

The key issues are:
- strncpy() fails to guarantee NULL-termination when source > destination
- it unnecessarily zero-pads short strings, causing performance overhead

strscpy() is the proper replacement because:
- it guarantees NULL-termination
- it avoids redundant zero-padding
- it aligns with current kernel string-copying best practice

memcpy() was rejected because:
- NQN buffers (subsysnqn/hostnqn) are treated as NULL-terminated strings:
  - strcmp() usage in nvmet_host_allowed() (discovery.c)
  - strscpy() to copy subsysnqn in nvmet_execute_disc_identify()

seq_buf wasn't used because:
- this is a simple fixed-size buffer copy
- there is no need for progressive string construction features

Signed-off-by: Marcelo Moreira <marcelomoreira1905@gmail.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/discovery.c

index df72076405062f788ee9a57f4e4dd5c82c7954b1..c06f3e04296cc148f794cee98d9e490c60e9c4eb 100644 (file)
@@ -119,7 +119,7 @@ static void nvmet_format_discovery_entry(struct nvmf_disc_rsp_page_hdr *hdr,
        memcpy(e->trsvcid, port->disc_addr.trsvcid, NVMF_TRSVCID_SIZE);
        memcpy(e->traddr, traddr, NVMF_TRADDR_SIZE);
        memcpy(e->tsas.common, port->disc_addr.tsas.common, NVMF_TSAS_SIZE);
-       strncpy(e->subnqn, subsys_nqn, NVMF_NQN_SIZE);
+       strscpy(e->subnqn, subsys_nqn, NVMF_NQN_SIZE);
 }
 
 /*