Commit 5f1263fe authored by Pankaj Raghav's avatar Pankaj Raghav Committed by Yongqiang Liu
Browse files

nvme initialize core quirks before calling nvme_init_subsystem

stable inclusion
from stable-v4.19.269
commit e5d18854cb71cc0f5fc4076570e4840c41419d02
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I69KBO


CVE: NA

--------------------------------

[ Upstream commit 6f2d7152 ]

A device might have a core quirk for NVME_QUIRK_IGNORE_DEV_SUBNQN
(such as Samsung X5) but it would still give a:

    "missing or invalid SUBNQN field"

warning as core quirks are filled after calling nvme_init_subnqn.  Fill
ctrl->quirks from struct core_quirks before calling nvme_init_subsystem
to fix this.

Tested on a Samsung X5.

Fixes: ab9e00cc ("nvme: track subsystems")
Signed-off-by: default avatarPankaj Raghav <p.raghav@samsung.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
parent e7926c0c
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -2617,10 +2617,6 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
	if (!ctrl->identified) {
		int i;

		ret = nvme_init_subsystem(ctrl, id);
		if (ret)
			goto out_free;

		/*
		 * Check for quirks.  Quirk can depend on firmware version,
		 * so, in principle, the set of quirks present can change
@@ -2633,6 +2629,10 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
			if (quirk_matches(id, &core_quirks[i]))
				ctrl->quirks |= core_quirks[i].quirks;
		}

		ret = nvme_init_subsystem(ctrl, id);
		if (ret)
			goto out_free;
	}
	memcpy(ctrl->subsys->firmware_rev, id->fr,
	       sizeof(ctrl->subsys->firmware_rev));