[PATCH 07/10] nvme-tcp: request secure channel concatenation

Hannes Reinecke hare at suse.de
Mon Feb 3 06:06:57 PST 2025


On 1/28/25 10:11, Christoph Hellwig wrote:
> On Wed, Jan 22, 2025 at 05:58:26PM +0100, Hannes Reinecke wrote:
>> Add a fabrics option 'concat' to request secure channel concatenation.
>> When secure channel concatenation is enabled a 'generated PSK' is inserted
>> into the keyring such that it's available after reset.
> 
> That's a very sparse commit message.  What is the point of doing this?
> What is the spec reference for the implementation?  What is the user
> interface?  Why does this now always select NVME_KEYRING?
> 
>> +	if (!ctrl->opts->concat || chap->qid != 0)
>> +		data->sc_c = NVME_AUTH_SECP_NOSC;
>> +	else if (ctrl->opts->tls_key)
>> +		data->sc_c = NVME_AUTH_SECP_REPLACETLSPSK;
>> +	else
>> +		data->sc_c = NVME_AUTH_SECP_NEWTLSPSK;
> 
> Took me a while to unwind this.  Why not make this a little easier as:
> 
> 	if (ctrl->opts->concat && chap->qid == 0) {
> 		if (ctrl->opts->tls_key)
> 			data->sc_c = NVME_AUTH_SECP_REPLACETLSPSK;
> 		else
> 			data->sc_c = NVME_AUTH_SECP_NEWTLSPSK;
> 	} else {
> 		data->sc_c = NVME_AUTH_SECP_NOSC;
> 	}
> 
> ?
> 

Ok.

>> +	ret = nvme_auth_derive_tls_psk(chap->hash_id, psk, psk_len, digest, &tls_psk);
> 
> Overly long line.
> 
>> +	tls_key = nvme_tls_psk_refresh(ctrl->opts->keyring, ctrl->opts->host->nqn,
> 
> Same.  Not going to mention more of that, but please fix it up.
> 
Will do.

>> +		if (ctrl->opts->concat &&
>> +		    (ret = nvme_auth_secure_concat(ctrl, chap))) {
> 
> 		if (ctrl->opts->concat) {
> 			ret = nvme_auth_secure_concat(ctrl, chap);
> 			if (ret) {
> 				...
> 
>> +	/*
>> +	 * Only run authentication on the admin queue for
>> 	 * secure concatenation
>> +	 */
> 
> The two lines of comment can be folded in one, and it's missing a period
> at the end of the sentence.
> 

Will be fixing it up.

>> +			/*
>> +			 * The generated PSK is stored in the
>> +			 * fabric options
>> +			 */
> 
> Missing period and not using up the line as well.
> 

Ditto.

>> +/*
>> + * The TLS key is set by secure concatenation after negotiation
>> + * has been completed on the admin queue. We need to revoke the
>> + * key when:
>> + * - concatenation is enabled
>> + *   (otherwise it's a static key set by the user)
>> + * and
>> + * - the generated key is present in ctrl->tls_key
>> + *   (otherwise there's nothing to revoke)
>> + * and
>> + * - a valid PSK key ID has been set in ctrl->tls_pskid
>> + *   (otherwise TLS negotiation has not run).
>> + *
>> + * We cannot always revoke the key, as we're calling
>> + * nvme_tcp_alloc_admin_queue() twice during secure
>> + * concatenation, once on a 'normal' connection to run
>> + * the DH-HMAC-CHAP negotiation (which generates the key,
>> + * so it _must not_ be set), and once after the negotiation
>> + * (which uses the key, so it _must_ be set).
>> + */
> 
> Another overly dense fomatting.  Are you trying to make up the
> extra width used in the first patches? :)
> 
Possibly. Will be fixing it up.

>> --- a/include/linux/nvme.h
>> +++ b/include/linux/nvme.h
>> @@ -1746,6 +1746,13 @@ enum {
>>   	NVME_AUTH_DHGROUP_INVALID	= 0xff,
>>   };
>>   
>> +enum {
>> +	NVME_AUTH_SECP_NOSC		= 0x00,
>> +	NVME_AUTH_SECP_SC		= 0x01,
>> +	NVME_AUTH_SECP_NEWTLSPSK	= 0x02,
>> +	NVME_AUTH_SECP_REPLACETLSPSK	= 0x03,
>> +};
> 
> Comments please to explain what fields this applies to.  Also we
> usuall try to split protocol definition additions into separate
> patches.
> 
> 
Ok.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke                  Kernel Storage Architect
hare at suse.de                                +49 911 74053 688
SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg
HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich



More information about the Linux-nvme mailing list