From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web12.6528.1646273198164688010 for ; Wed, 02 Mar 2022 18:06:38 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=QG0pgSr0; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: hua.ma@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1646273198; x=1677809198; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=3HFtDT2m0XVU8lION//dSGtWeirBBoWx6lCbPTjsVtA=; b=QG0pgSr0GhPmORK25ungRAxG0wXLMTMNA3JqwVeFq1dsA1Q1naNtifWB NoetGvCADCPb2syL0gpZA/2yx7sFRia4x5JVxbxExeq7rF5GXSEXppQU4 Cs99k6I1ejbkhyJe82OnyPVrlBjgacCrbGi//xEjLpRixp8wcsFvjbbd4 SpOwurV21ATfneNRso3m1KlrOKRalzBxTwgXbeyORQ+jIA74RpMGepgzM MmigGO0z6Qy2U9kZxfAYGMv2vWfXgBSIiFGh0iwNYxTG+hPV6lchGiiBw 2DqOS7/1bKYiSXbxqdDcJuXswP0H9dO9UBBPjRP0LzPMKWTYdwxq8Ki9J w==; X-IronPort-AV: E=McAfee;i="6200,9189,10274"; a="251128993" X-IronPort-AV: E=Sophos;i="5.90,150,1643702400"; d="scan'208";a="251128993" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Mar 2022 18:06:37 -0800 X-IronPort-AV: E=Sophos;i="5.90,150,1643702400"; d="scan'208";a="535622835" Received: from huama-mobl.ccr.corp.intel.com ([10.239.37.125]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Mar 2022 18:06:34 -0800 From: "Ma, Hua" To: devel@edk2.groups.io Cc: jian.j.wang@intel.com, gaoliming@byosoft.com.cn, hao.a.wu@intel.com, ray.ni@intel.com, Hua Ma Subject: [PATCH v1] MdeModulePkg: Add a check for metadata size in NvmExpress Driver Date: Thu, 3 Mar 2022 10:06:16 +0800 Message-Id: X-Mailer: git-send-email 2.32.0.windows.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3856 Currently this NvmeExpress Driver do not support metadata handling. According to the NVME specs, metadata may be transferred to the host after the logical block data. It can overrun the input buffer which may only be the size of logical block data. Add a check to return not support for the namespaces formatted with metadata. Cc: Jian J Wang Cc: Liming Gao Cc: Hao A Wu Cc: Ray Ni Signed-off-by: Hua Ma --- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpress.c | 15 +++++++++++++++ .../Bus/Pci/NvmExpressPei/NvmExpressPei.c | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpress.c b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpress.c index 5a1eda8e8d..46b7dcba20 100644 --- a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpress.c +++ b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpress.c @@ -139,6 +139,21 @@ EnumerateNvmeDevNamespace ( Flbas = NamespaceData->Flbas; LbaFmtIdx = Flbas & 0xF; + + // + // Currently this NVME driver only suport Metadata Size == 0 + // + if (NamespaceData->LbaFormat[LbaFmtIdx].Ms) { + DEBUG (( + DEBUG_INFO, + "NVME IDENTIFY NAMESPACE [%d] Ms(%d) is not supported.\n", + NamespaceId, + NamespaceData->LbaFormat[LbaFmtIdx].Ms + )); + Status = EFI_UNSUPPORTED; + goto Exit; + } + Lbads = NamespaceData->LbaFormat[LbaFmtIdx].Lbads; Device->Media.BlockSize = (UINT32)1 << Lbads; diff --git a/MdeModulePkg/Bus/Pci/NvmExpressPei/NvmExpressPei.c b/MdeModulePkg/Bus/Pci/NvmExpressPei/NvmExpressPei.c index f73053fc3f..6e27950648 100644 --- a/MdeModulePkg/Bus/Pci/NvmExpressPei/NvmExpressPei.c +++ b/MdeModulePkg/Bus/Pci/NvmExpressPei/NvmExpressPei.c @@ -104,6 +104,21 @@ EnumerateNvmeDevNamespace ( // Flbas = NamespaceData->Flbas; LbaFmtIdx = Flbas & 0xF; + + // + // Currently this NVME driver only suport Metadata Size == 0 + // + if (NamespaceData->LbaFormat[LbaFmtIdx].Ms) { + DEBUG (( + DEBUG_INFO, + "NVME IDENTIFY NAMESPACE [%d] Ms(%d) is not supported.\n", + NamespaceId, + NamespaceData->LbaFormat[LbaFmtIdx].Ms + )); + Status = EFI_UNSUPPORTED; + goto Exit; + } + Lbads = NamespaceData->LbaFormat[LbaFmtIdx].Lbads; NamespaceInfo->Media.InterfaceType = MSG_NVME_NAMESPACE_DP; -- 2.32.0.windows.2