lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <a33f4ebe-de7d-479b-97d6-3d98e34ab94f@suse.de>
Date: Wed, 9 Oct 2024 08:16:25 +0200
From: Hannes Reinecke <hare@...e.de>
To: Matias Bjørling <m@...rling.me>, kbusch@...nel.org,
 hch@....de, dlemoal@...nel.org, cassel@...nel.org,
 linux-nvme@...ts.infradead.org, linux-block@...r.kernel.org,
 linux-kernel@...r.kernel.org
Cc: Matias Bjørling <matias.bjorling@....com>
Subject: Re: [PATCH 1/2] nvme: make independent ns identify default

On 10/8/24 16:55, Matias Bjørling wrote:
> From: Matias Bjørling <matias.bjorling@....com>
> 
> The NVMe 2.0 specification adds an independent identify namespace
> data structure that contains generic attributes that apply to all
> namespace types. Some attributes carry over from the NVM command set
> identify namespace data structure, and others are new.
> 
> Currently, the data structure only considered when CRIMS is enabled or
> when the namespace type is key-value.
> 
> However, the independent namespace data structure
> is mandatory for devices that implement features from the 2.0+
> specification. Therefore, we can check this data structure first. If
> unavailable, retrieve the generic attributes from the NVM command set
> identify namespace data structure.
> 
> Signed-off-by: Matias Bjørling <matias.bjorling@....com>
> ---
>   drivers/nvme/host/core.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 0dc8bcc664f2..9cbef6342c39 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -3999,7 +3999,7 @@ static void nvme_scan_ns(struct nvme_ctrl *ctrl, unsigned nsid)
>   {
>   	struct nvme_ns_info info = { .nsid = nsid };
>   	struct nvme_ns *ns;
> -	int ret;
> +	int ret = 1;
>   
>   	if (nvme_identify_ns_descs(ctrl, &info))
>   		return;
> @@ -4015,10 +4015,9 @@ static void nvme_scan_ns(struct nvme_ctrl *ctrl, unsigned nsid)
>   	 * data structure to find all the generic information that is needed to
>   	 * set up a namespace.  If not fall back to the legacy version.
>   	 */
> -	if ((ctrl->cap & NVME_CAP_CRMS_CRIMS) ||
> -	    (info.ids.csi != NVME_CSI_NVM && info.ids.csi != NVME_CSI_ZNS))
> +	if (!nvme_ctrl_limited_cns(ctrl))
>   		ret = nvme_ns_info_from_id_cs_indep(ctrl, &info);
> -	else
> +	if (ret > 0)
>   		ret = nvme_ns_info_from_identify(ctrl, &info);
>   
>   	if (info.is_removed)

That is a very odd coding. 'info' will only be filled out for a non-zero
return value of nvme_ns_info_from_cs_indep().
So why not check for that?
But if we get an NVME status back there is a fair chance that something 
else than 'invalid field' (or whatever indicated that the command is not 
supported). That then would cause the device to be misdetected without 
the admin knowning.
Shouldn't we add a message if we fall back to nvme_ns_info_from_identify()?

Cheers,

Hannes
-- 
Dr. Hannes Reinecke                  Kernel Storage Architect
hare@...e.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


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ