From nobody Sun Sep 27 00:44:16 2026 Received: from smtpbguseast3.qq.com (smtpbguseast3.qq.com [54.243.244.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 597D746A61A for ; Thu, 27 Aug 2026 13:04:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.243.244.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835907; cv=none; b=XMXmSwtaH1tF8pB0MNlgUyxgjGpY9lI561VAu3LrM/yiB+sS0U8bUnnVo6Hq/7sTaMcNFyHpV7xU/PusYQVCwOxS4ZvVDdTHcszQaLX7G5kcLqJorl2km5J7PPSyiFPyZc1dvEqLc41r3sicJhRd83f2pKpsx9SHY+KSD95G6uI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835907; c=relaxed/simple; bh=I8aYjQfk+OE6swXIGCwAs7CpD3xqQAL5xAKiiv2ZBZk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z5MiM+L+vh6yLLx5LhxUZjgK7F8eKuIIvpOj/MUjGxb07z45QMmfPnwySfk5xbrrCfcCQN+njKh2reTqEeCdWIPqovJr60+wozcZL9GxIfFkp6QtYBqSKm5k2bDAfou32qOwl+Hq5BSxi6dvCQDk+qCOcS4QjEfxALW3fhWC8q8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=RLlL2+LO; arc=none smtp.client-ip=54.243.244.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="RLlL2+LO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1787835827; bh=NqU/OQY6xhI/9fc50QMVTcXsqM0l3RNkUoJ6o7t1gxg=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=RLlL2+LOzXy2PGCMgo3DWBhTqbBJETRZse9gyf5rJWXg7PBpoJwfPDH/FZ0AtJJi2 keoDw3A+tXOHqx2EE6wU4DSoBPmLvS/ADqS7Nj8cYnOcNa/ea5x+T01zZ3CJu3KlEI rMtxPKy/W2f2pZ7qSY1OzHKFw+oQm+Osxl+mG1Kk= X-QQ-mid: zesmtpgz9t1787835809t88c8b7c0 X-QQ-Originating-IP: mDjmIxSPwg/48udOaXPPDFGt4FwgJ2jGc+3qsTD8nC4= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 27 Aug 2026 21:03:27 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 8082855683011287643 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v2 1/4] nvme-fabrics: separate option tokenizer pointer Date: Thu, 27 Aug 2026 21:03:26 +0800 Message-ID: X-Mailer: git-send-email 2.50.1 In-Reply-To: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> References: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: MCEqJnTzsXC9tEXexN3Apj0cm/wYZAyTNRMvty3fdKz4aib8Ja4SlcjV ykAdJ/ZtbTackWk7QglTIn1WMuVaE3071hqYGdks1snWUOGO/zJ78j9gI4ujelNoXaL8VFs uunk8kHZYsZooR3ESxqHdQZdOjKw1vQfaYfuiTyvp8K+zPpkOpbCgPUPGheYEnG8fSzJc6m BGiWTTyPga3XwNYIzMdoLsNTnb2sd/1BwXkR6LVK/YuALvbCnfv58J3+repBm6NILlAQ5bc okYD4RmsvRh+JPQLByh2vq3P0Z69jdFtqFinLxRgbz4/w1MHU2iXIPjgoMfhlToaOWvXF4S qjU/P2WiYSo/oXQhPQ+d2g7E6SJG7Uq5rI9D/QnXZugAqp0pqFZazymBnRAhIQ9VJZwRSot TGq4wJvrqxuJzaWqx7DVolpk0YiEeAD0aB3ZI114sapVsyWsqch1Pqkj3r4wP7kqM1WTAjS L0wO6y/jwaD1KaMCD/rIzzFlzPFYQ8YV4wHK2Cn5LFaOm20bUjgETBCCpKF3r4YLl17ZMB/ f9h0VcSPkh1gKoxIwF4LKHNUkN2y29FUnzxQCs+HiLsr8rFr3kVGjWU/idD0d9A9L9v0xVC q31CzI1L4visxKy79LFzLQunTlfSkIvzB8AQk77I00TbNg4TYMJKl2yJt4RWVRQJm8qSxYy NZwVRokTvplfumnG3BUU1e3IC1W2WTeTpuuYyldgxechPvVO7tsUZH6u+h0UZL5QooMMeUO +04k8+SglqrHjJP+wB5zRrdgpgnEi5vnbVyVNVQqUoFA+NpxAtS4E1SYoHCxrs68sDBy8AZ 1f+NkQdHiDaHDNls8Qv6vW+X8f58IJuGZ/ESvTckxsBntEwHc7DFVdmzzxMHC6bULEKosgl Mu479a8UUaR2AgbgUD2EEU27OoN5WU0ZMGMd1eTSykiMB5vx1mQRv6NVsYbKdfvMeKxSjcU SQxkkiCQQGV0P42ne/iboN969KHMST2lQYW3NtZj4cP+/Iae+auSiipPrU2wdYHEP9l0flz VCT7XtXny7aE8sa3gNNHHSXTmBMIe9YaFQClPmRhRxKVrO21poEf3Y/xdeJiOse4lR6IoZJ gdHpg9nE/5MKzh+vvn/APo= X-QQ-XMRINFO: MPJ6Tf5t3I/ylTmHUqvI8+Wpn+Gzalws3A== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao nvmf_parse_options() currently uses p both for the option returned by strsep() and for strings allocated by match_strdup(). The former points into the temporary options buffer while the latter owns a separate allocation, so the same variable represents two different lifetimes. Introduce option for the current string token passed to match_token(). Leave p for temporary strings returned by match_strdup(), giving option tokenization and allocated string storage distinct variables without changing the parsing logic. The name option is intentional: options remains the backing buffer for the full request, option is one comma/newline-delimited entry, and token names the integer result returned by match_token(). This is a mechanical preparation with no functional change. Suggested-by: Christoph Hellwig Signed-off-by: Xu Rao Reviewed-by: Sagi Grimberg --- drivers/nvme/host/fabrics.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 59f823dfbbcc..1ec6da49167d 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -716,7 +716,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options = *opts, const char *buf) { substring_t args[MAX_OPT_ARGS]; - char *options, *o, *p; + char *options, *o, *option, *p; int token, ret =3D 0; size_t nqnlen =3D 0; int ctrl_loss_tmo =3D NVMF_DEF_CTRL_LOSS_TMO, key_id; @@ -747,11 +747,11 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, uuid_copy(&hostid, &nvmf_default_host->id); strscpy(hostnqn, nvmf_default_host->nqn, NVMF_NQN_SIZE); =20 - while ((p =3D strsep(&o, ",\n")) !=3D NULL) { - if (!*p) + while ((option =3D strsep(&o, ",\n")) !=3D NULL) { + if (!*option) continue; =20 - token =3D match_token(p, opt_tokens, args); + token =3D match_token(option, opt_tokens, args); opts->mask |=3D token; switch (token) { case NVMF_OPT_TRANSPORT: @@ -1068,7 +1068,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, break; default: pr_warn("unknown parameter or missing value '%s' in ctrl creation reque= st\n", - p); + option); ret =3D -EINVAL; goto out; } --=20 2.50.1 From nobody Sun Sep 27 00:44:16 2026 Received: from smtpbgsg1.qq.com (smtpbgsg1.qq.com [54.254.200.92]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC55C4477E8 for ; Thu, 27 Aug 2026 13:04:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.254.200.92 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835901; cv=none; b=bbvJ3wJOczvoZwadHnnFKS4Jl8TpXt3qAQ4Gv350kmES3upq3NqxG6iT3BMdTB9Hk2lbxX713UZ/CJmWL8Tu9qW6/KSX9cf0puhmcD0NJ6TIZ4XoVFQCmZEzc7yQBfPKdQxfbY7C84nYTQYBLc5eccGCdJQU/AE9swVyOE7st6M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835901; c=relaxed/simple; bh=U3oUhCeFlm8VHw10BhaQEjChiC9PpUD3nBM7wDVO22k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YNpHFmTfD/tbVeiigSITzXNS8rZZtPEWSgkOXt6vuZ6psm3Xj++41kGyrQ1+QvxRp/cyid+fri4lYLDwyl501pL6vmX5u+PhksZEonKd1/jfICVvxNeKLNYmEK4uspwAVp5zuZjWnJKLTmXlkBwRf+M2BRckZbYrANobPEK9d8A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=ZfgG4wnb; arc=none smtp.client-ip=54.254.200.92 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="ZfgG4wnb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1787835839; bh=DudSYiu0l51smEG9rCcrUuSsdx8R0ivwHpjL+SnU4yU=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=ZfgG4wnbzGRdwf7CkqJj8ptZrvGPfaEKYQSxdtJNWtIxIqX47ZBBDxrqiwauKOiEw L11M7zbKsXzzgr89NyuIu5gjEtLXzCxl2hYPZ/k7uUXkdeNjAwaZnP8uAREzw72Wi+ 5CsT9Ec3teM6JNiPgUDfzwIIbumI7cPQ/+xQEbHM= X-QQ-mid: esmtpgz16t1787835823t85a16d86 X-QQ-Originating-IP: WPzcot1uElX5wBNmxkZ7Vir9EpYhUzqvQOGUV0oKGjs= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 27 Aug 2026 21:03:41 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 17996740236134004177 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v2 2/4] nvme-fabrics: add helper for owned string options Date: Thu, 27 Aug 2026 21:03:40 +0800 Message-ID: <92BDA706885092E8+20260827130340.1390531-1-raoxu@uniontech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> References: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: esmtpgz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: NWth7vBa++Gd6mfcxCMtAhqX+p60hOcvzQEJq0+432Zdddw1dG5Ln2ys yu9v20ggu23w2TYrlbbss146UZWKdka17cBXhDcVzhHmRfp+E7bGA2OD/FKNoI86sRV5ZWA KgFZXbeUAUdg/nFYq3NikTu3Br1E+WtakXSgqIA3yyDwyI+HvKalNYrOAc3s9xhnJSCD3gn Oct0JysX4rkpzTCx3yuGI5L3vLxsy71BxwxCiA06SyPiH1AjoVV3J1aCj7rComMCV1wKnT6 X7ZZg473VAbQ+eCBl+KeXrQrygH+x4wkEjhRo01BF3bjYxJ5aMnXKtM8xBKmZm1tyXQUnnB aJJ+huqY8VO0VZpIjklnvuTFJtFlIoDTzjdOc5D56Q+BO0OCQMtjstq2c1gcfgoO6m9MNLh kKs2WeB/eNMAAA5o7lLrZUiFrETZ1JR2T8+WhzbzZX7sOBENAkp/9haPaKRY0cOyA9HbpRb li8EFg05w1PWJEMPlnyC5owJl2cuTI586xXk8beaFcvfBJz145NYtLPeR6/H0cuiVt0YLT3 AModY112uo7Fo1IVO3gxkZQ+vYx0goXIJurVe1yYKT3cXA1uBYculD3b7Jw3+xJxxie2JRT HBSzVWVsuSXXxEzryNM3dbutuJsEAIgVYzxodEsTLQbQP0C8YFBG5SGyoMiWNvrjLPNqy71 2IQlBnuMN28RV+bXMLqM404xeV6D2BCXwEyS7ctYIkTkzQA+X89zBzxYD8jBUMENGDeCztJ BO9443jtJwMuW3529zmmITAVj5nJ2uBvkyigRW3aDGu92cUR3WBrwVE2FRBAGGW4jiCcjbv XDKp796WvJ2rI9TbPCw9pc4CrVRCDGzwKR0ov+OVrMwkfmCqIahZpIQzs6iSyKs0ODpfRAP aGh3wCl1RW2m6+2xiui6C522lbMk2XMpRyAv7VLW/z+XZUITouHetBRLsxxqvo49UJHasnV YfpmQ/8U/AaRfuSAHkb3nQxS/matkIbNEcMaSiQ4R0JpOZO0F7dJNEo3qgmx2DJ/0h/E08g tvMOyGYlXj21rqd1RZ3aL0rPtU5qBRv1EfKSesqaHfsNazYvBHekBCPl5F1DC05QqpQx9FO A== X-QQ-XMRINFO: NS+P29fieYNwqS3WCnRCOn9D1NpZuCnCRA== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao Five string options -- transport, traddr, trsvcid, host_traddr and host_iface -- have exactly the same parsing and ownership rule: duplicate the matched value, free the previously stored string, and transfer the new allocation to the corresponding struct nvmf_ctrl_options field. Add nvmf_parse_string_option() for that common operation. The helper owns the match_strdup() result until it either fails or stores the new pointer in the destination field, keeping this simple allocation lifetime in one scope and removing five copies of the same sequence from nvmf_parse_options(). The helper is intentionally limited to direct string replacement and does not absorb option-specific validation, conversion, or sensitive cleanup. No functional change is intended. Suggested-by: Christoph Hellwig Reviewed-by: Sagi Grimberg Signed-off-by: Xu Rao --- drivers/nvme/host/fabrics.c | 53 ++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 1ec6da49167d..aab3fd279d0e 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -712,6 +712,19 @@ static const match_table_t opt_tokens =3D { { NVMF_OPT_ERR, NULL } }; =20 +static int nvmf_parse_string_option(substring_t *args, char **dst) +{ + char *value; + + value =3D match_strdup(args); + if (!value) + return -ENOMEM; + + kfree(*dst); + *dst =3D value; + return 0; +} + static int nvmf_parse_options(struct nvmf_ctrl_options *opts, const char *buf) { @@ -755,13 +768,9 @@ static int nvmf_parse_options(struct nvmf_ctrl_options= *opts, opts->mask |=3D token; switch (token) { case NVMF_OPT_TRANSPORT: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->transport); + if (ret) goto out; - } - kfree(opts->transport); - opts->transport =3D p; break; case NVMF_OPT_NQN: p =3D match_strdup(args); @@ -783,22 +792,14 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, NVME_DISC_SUBSYS_NAME)); break; case NVMF_OPT_TRADDR: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->traddr); + if (ret) goto out; - } - kfree(opts->traddr); - opts->traddr =3D p; break; case NVMF_OPT_TRSVCID: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->trsvcid); + if (ret) goto out; - } - kfree(opts->trsvcid); - opts->trsvcid =3D p; break; case NVMF_OPT_QUEUE_SIZE: if (match_int(args, &token)) { @@ -907,22 +908,14 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, opts->reconnect_delay =3D token; break; case NVMF_OPT_HOST_TRADDR: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->host_traddr); + if (ret) goto out; - } - kfree(opts->host_traddr); - opts->host_traddr =3D p; break; case NVMF_OPT_HOST_IFACE: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->host_iface); + if (ret) goto out; - } - kfree(opts->host_iface); - opts->host_iface =3D p; break; case NVMF_OPT_HOST_ID: p =3D match_strdup(args); --=20 2.50.1 From nobody Sun Sep 27 00:44:16 2026 Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B65C456DF1 for ; Thu, 27 Aug 2026 13:05:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.207.19.206 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835923; cv=none; b=WIkpWSitzZgElvtOl2MUHp+cj0wSREHqHdFpzXXzSje7PtgqLrwOWhoQt/0Le7X0K25Hzu/Wjvi01jblIGFYckBBVZn64NnVR2znnul6NvgTp4huqNgUsjOPoyHPQkTuqvLqvC29stQ4dtRK39tpPTxniGE3BqXpaaJmL2uJDco= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835923; c=relaxed/simple; bh=tlwmsXU1TI1dDNisHesFFFQzWAmxz4dg76o9OEnHLd8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T9X9QE3HX/gzABqF45OHRT9jDteUzjeLGzHwvbAEV0ZMWxKyTxTaG1Ae4inqCPq4xHdVroF0GlbltW3MpVfY/xQq6bZJQI7c8DT4wEG/L3w537h52NmM8R07GhyICS/MIqlUbWmBwn6juo1vbz+rZMuVIUT19AqLvtJN93QKU1U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=TyIGP7Bn; arc=none smtp.client-ip=54.207.19.206 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="TyIGP7Bn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1787835852; bh=5K8HiGpe4pTl4e3/3UO5i3J1pMJi2AYfK6GebpRCy2g=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=TyIGP7Bn5JvjlJSv9KJEuCXBJDqOOmb/ifICdKiPVZKmEE8baquWhbUE+tnIvyBu7 REngFbGFtlSLQLsigpRXaBLdSHmidrQe1jad87MR+sZrPiUBS5ZzcJNm6Gh04ZpzmL jqYreiPVFB9Ddpo5NIvzJGCsksF40bFbVsXXtJ3g= X-QQ-mid: esmtpgz15t1787835837te8da011d X-QQ-Originating-IP: 5NWuQc8cQ++sHC19BBODe+OXEnWDkVuSNy8qkIGmp1I= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 27 Aug 2026 21:03:55 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 8434123566750053300 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v2 3/4] nvme-fabrics: reuse string helper for subsystem NQN Date: Thu, 27 Aug 2026 21:03:53 +0800 Message-ID: <2480D624F1D8ABC8+20260827130353.1390863-1-raoxu@uniontech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> References: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: esmtpgz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: OXWhkXa0b/rw9ftOf5B9qskYclDcj3ibk9fb+k1xV2jjEGFk0QaVM6ho zMTicCu1OLCZLW6GC2Glwte25aDEIBg4uBfFHqSUqWsT1cgV4r1mopcyeCq65wH8eW5YlRH lG/EesTLAzeTSQ/vGEkcdnNa0V28Lc0qTNxZoeeH/+jrf73sGccFXL3Ce+QQJKvegRy3NR2 DgYs33f1qNJz3r705hUQPrBbFpSkEVrk4WRVPXRxefhXWmDSW9b3u1KCaoxlPfk8RpTbLGN Bxl9exa8ZfdaB3lM9nBLLM9+ZJ94Kl4+HCTexJg8HrohGuwGTEVZgiCxHhVgCT89aAJBItw vNifRWfuvl4ysuNPlbHuQgJSPUSUBWsHhdSGztgIMxk9tPengNpaJn+Ss7SNqsqagDRETGm uSHNucXbHpKijKQcyBx/XNw6632JkV/C5OuhWc1wJNOdC4GHVMoI9Dby/yap/mkDep/vaDw /JdWTN+FxoxPMSjCcqgYaP+7g38cD7F8nX7jmJeeUlJ+EzqJIkF+EEH1CHOgPLun0b6HPck gGUgxwHOPdJuNpkf2TbtFAZTUR5OTBb+Mi1F2lPXIXO97+oRPOAJs/PWfYe07zkVvEKlyov icEYfujhdHj9c/A4FyLKehUD9v7cZI6+8GTE/KS7dqp20FUNPlwOLYRJYSr0QY5h/B2Bd77 BQDY2GbLOzq70CfNoiDNQPPKJWD35p0ZLppiXsXrImPJLAlOXWRBMkd49EgQB04fbScTzkg MyV0unpmEikok8EMIxKL9GSIoWuz+VKKvR1FA/UTe75+VXnt1Cl94QOrhKHqTr9CseyVb2T nJJyYu/Tc0VrnZmqgMQU34Xo07HTQrurna+hb6/Wu5xag9D3zPYwTCpVTCSPuKT+HckvwWX V6jEYFHD1rRhNKQ+7oTL6BT1JeiJMM3bUww0xyJCun47jO0TX4PmpJUI0pexpS/luLzBlMA drCrtswElq1ztDoz5pHACGubp21mPOHE15ZjRG42LaS/c+VpO0G+isIx0NO77t93IZ+88d6 p6TjmTArfnCRzdHTk2WA02HoyPZZ/x+QbWQIPojwcUw4KzPjnq5o9LxF0Vb30Ze4eaHL2KI oVb4gEClT/W X-QQ-XMRINFO: Nq+8W0+stu50tPAe92KXseR0ZZmBTk3gLg== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao The subsystem NQN starts with the same owned-string replacement sequence as the direct string options handled by nvmf_parse_string_option(): duplicate the matched value, free the previously stored string, and transfer ownership of the new allocation. Reuse nvmf_parse_string_option() for that replacement only. Leave the existing NQN length validation and discovery-NQN update unchanged. The hostnqn and hostid parsing paths are also left untouched. This removes another copy of the match_strdup(), free and ownership-transfer sequence without introducing a dedicated helper or changing option-specific logic. No functional change is intended. Suggested-by: Christoph Hellwig Signed-off-by: Xu Rao Reviewed-by: Sagi Grimberg --- drivers/nvme/host/fabrics.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index aab3fd279d0e..24385e777307 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -773,13 +773,9 @@ static int nvmf_parse_options(struct nvmf_ctrl_options= *opts, goto out; break; case NVMF_OPT_NQN: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->subsysnqn); + if (ret) goto out; - } - kfree(opts->subsysnqn); - opts->subsysnqn =3D p; nqnlen =3D strlen(opts->subsysnqn); if (nqnlen >=3D NVMF_NQN_SIZE) { pr_err("%s needs to be < %d bytes\n", --=20 2.50.1 From nobody Sun Sep 27 00:44:16 2026 Received: from smtpbguseast1.qq.com (smtpbguseast1.qq.com [54.204.34.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 09172367297 for ; Thu, 27 Aug 2026 13:05:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.204.34.129 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835936; cv=none; b=PfErBGOwrGihepY4teABYuJ/8mr/V39UlELgRjT6XOKGI6mDUxsVmfvFjtgtBtKaqMJ+PSoarAjJ5L8qerlxdybcsDHa39KYJFqhjnxs7yu6Np/EIwvdjSDuosjwwGm4Rq9JvW00IvvRnmRrTHZJ1FCB8wxMhyZMlOL9k22W0MM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787835936; c=relaxed/simple; bh=kWbuAeU3rZEcLpkxyQWhYiUIkF0sIct8wc2VoP6TBKs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=avIaGD3btqgAmwZRbnpHRgY9fbcYSCkNX0Wie05PAeNIt00oyeSsTuDObYajHDZin5zegHTJu16G/xNkGlKrrkeEkXpWapXcGizd78qnqIUbndDG2WDfM3oQO7tvZynTeI2CGwmhNPM9vg3gL6fZ6nCGITyoYkwSnRIAU1WFf9E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=nM2qiGk3; arc=none smtp.client-ip=54.204.34.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="nM2qiGk3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1787835866; bh=URWLRJR30vRoaJ6t+h0dcOE0A9/rLwIDzZpxZ507naE=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=nM2qiGk3aXrMOvgTwfPEBoAhbyijwvPSJ7PCNlf89cBQJWjG8SdidCHP2jIlhdvoz FTLxHPZfReSZhpx3cScaC5VnWOD7ylm5shf2IU+0JOHTWgMYD80+9Ht/01LfjyTQ0M m6qiklYIQIQW+Oi+8/gZjJjVB8H7pNY+ONM4y7f8= X-QQ-mid: esmtpsz20t1787835851tb572156c X-QQ-Originating-IP: mTHK8769jpSroKAKN3aeJtIDyenvTb4Gn5q3LoxzuE4= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 27 Aug 2026 21:04:09 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 14667445658277018892 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v2 4/4] nvme-fabrics: add helper for DH-CHAP secret options Date: Thu, 27 Aug 2026 21:04:07 +0800 Message-ID: X-Mailer: git-send-email 2.50.1 In-Reply-To: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> References: <0D24A9A3F19DBCF9+20260827125710.1381672-1-raoxu@uniontech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: MRQq5cyInCgJdQv6dhbTMzU35xbCAj5GKngjDeu1Tf1gBwdn13C0fmdC uA8nps4psrwr84xl4NH5VzwOTM13UT7YzpQo20j9GYVjyLMPCEMiPUhqX67EL/Tr7ESicGQ OvhQRWpeDk4x7HQ4LpdAack2deZ4SH6gyxEjP6Nme015njkgwDk/P+4Bd+GLYg2OTbkftwF C8baW5suo7fXmq8TsQCiVMrb/8KJWAX4UhW4eR3dLRGXbI0q/34f9kDBH74/QAzrBrC2LAs A+Jze70re/NFUpSE3cL3avszEb05P9zn6tsxy6Kv9ZQ6T07vFiVeI0R4ARO5Pj6uZA40G7u QljX9uEwPwC1QH8KK+BTy/Lp6NZLDzqVTzDsENG01gJini3Mr4UUou/0VBfkfMbYTF7Evj0 gisWhFlaxTEwkMwVhZie8sUlNzQlx3cCRVgLhLfIqwBXaSAwegNtZzk1QF4ExD4xbc8893Q X1oDgzB07eB3DlvC5hgbJJyzZP+KKADUNl0yy9TOVcDqQB1d73wSNUyEENcC/4/KkIieUcE KvUs6hKDt/7aPRCmbyHeoA8Yae8qjzG5pifJp5hLB8mXfzK4veaLXSGKuw/edyGXaX0cUY6 kACR74Y1iyBtv8LlNsfx9Un8Cefe+aFiznz7Zrj+RO9gO9px7zkx1G0u6Vk2HaLEYnb3OXZ GEqYsPpPokKo4dP6B9E4AH8lodOB4hITozEOVk+8Asw4KEYj87TGmjhYSjTmJb5FM0A1xvJ XkmOCoOEZZrL0np9stTYF+N5majatthpFAthXaTg+SWQvmcSIU+RkSHegBBGioPi/3Iu5KY Tp/ZXYp++EztX+PhzIWFZsFioHnKYFykooOaUIJfBaZCG3Mclb2Eiw0TnrR+EovbsEC+HcH S61F1/VNw7bgVBhWVQZkrZaZLf+DsjVRHj8SWemar1DFDDSRSG99neGiQmqKdHLLocWFRG+ QYFzx6uXHPVgsnMGiHtzJj9kdlvX8sG0arr/tCNhq87DBH16Xg+L6WxFs/UzOkLrfdmeGT0 TuBJ745AHUdSU4zs+tRVfTuubR7KXadrsOXtWaO3MrFJ4yjE0j1U0wNLbF6QsTk6pJogfrn A== X-QQ-XMRINFO: Nq+8W0+stu50tPAe92KXseR0ZZmBTk3gLg== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao The dhchap_secret and dhchap_ctrl_secret options have a distinct string lifetime because their values are authentication material. The temporary string must be checked for the DHHC-1 representation and discarded with kfree_sensitive() when validation fails before ownership is transferred. Add nvmf_parse_dhchap_secret() to keep match_strdup(), DHHC-1 validation, failure cleanup, replacement of the old value and successful ownership transfer in one scope. Both secret options use the same helper because their parsing and ownership rules are identical. Keep the existing replacement semantics for an already stored valid secret; this patch only moves the parsing and temporary allocation lifetime into the helper. No functional change is intended. Suggested-by: Christoph Hellwig Reviewed-by: Sagi Grimberg Signed-off-by: Xu Rao --- drivers/nvme/host/fabrics.c | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 24385e777307..dc8883d85f45 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -725,6 +725,25 @@ static int nvmf_parse_string_option(substring_t *args,= char **dst) return 0; } =20 +static int nvmf_parse_dhchap_secret(substring_t *args, char **secret) +{ + char *value; + + value =3D match_strdup(args); + if (!value) + return -ENOMEM; + + if (strlen(value) < 11 || strncmp(value, "DHHC-1:", 7)) { + pr_err("Invalid DH-CHAP secret %s\n", value); + kfree_sensitive(value); + return -EINVAL; + } + + kfree(*secret); + *secret =3D value; + return 0; +} + static int nvmf_parse_options(struct nvmf_ctrl_options *opts, const char *buf) { @@ -1010,34 +1029,15 @@ static int nvmf_parse_options(struct nvmf_ctrl_opti= ons *opts, opts->discovery_nqn =3D true; break; case NVMF_OPT_DHCHAP_SECRET: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; - goto out; - } - if (strlen(p) < 11 || strncmp(p, "DHHC-1:", 7)) { - pr_err("Invalid DH-CHAP secret %s\n", p); - kfree_sensitive(p); - ret =3D -EINVAL; + ret =3D nvmf_parse_dhchap_secret(args, &opts->dhchap_secret); + if (ret) goto out; - } - kfree(opts->dhchap_secret); - opts->dhchap_secret =3D p; break; case NVMF_OPT_DHCHAP_CTRL_SECRET: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; - goto out; - } - if (strlen(p) < 11 || strncmp(p, "DHHC-1:", 7)) { - pr_err("Invalid DH-CHAP secret %s\n", p); - kfree_sensitive(p); - ret =3D -EINVAL; + ret =3D nvmf_parse_dhchap_secret(args, + &opts->dhchap_ctrl_secret); + if (ret) goto out; - } - kfree(opts->dhchap_ctrl_secret); - opts->dhchap_ctrl_secret =3D p; break; case NVMF_OPT_TLS: if (!IS_ENABLED(CONFIG_NVME_TCP_TLS)) { --=20 2.50.1