From nobody Thu May 16 00:59:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+112738+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112738+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1703037314; cv=none; d=zohomail.com; s=zohoarc; b=iW6Ub023rT15jJLs6qulPqgy0xqDzWLrBYtrSb6/7i2fdA8Abavb2wRhvtSz4iZm2PFDQFgT4f30EluEbp87VaemFtSCXICV+ZlNthg9ITusTjIoFmg8lJnNOgKAWFf4l08j62KySUw6lxFg/8oko/mexNEl/w0EjTJY8lyR6XU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1703037314; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=/KjsQZMmm2a1TEAmHpXbAa1op3sdk6LMuVZxV47eQFM=; b=U2Pcj+5i+fysXunOKNaVd4R5Mu8ZU5ay8cQVY4b0RLDgXRovG4H+7xFgQhMxY37CLVUy5HZesnUyUEkz666ps8vRIkOUIkg+ZfB7ENteDCsAwfyNVwzN9dpSCLqDhR8j14Z+R2UfeDk8pP6y+wZOMrq/2CTajUHkigSO9Beyjks= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112738+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1703037314945291.1223320764741; Tue, 19 Dec 2023 17:55:14 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=CJsNEyTydwLp/X/JGfnPfNLKZlbx4ACgfNSN7DWOhM8=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1703037314; v=1; b=Llx7ni28Whx/NbadH0j0lsf0VCgRqlY7WRMYMcRo+l5xWtGDg52faOe2G+j43QxyzGdQs1B5 RbtCUd/4imkhzQbviF/Bwd2i8TJ+yKZNW70WYZgUZXziqKqOYsNK58eDfDgioqWJHAszuDRU5JD nRmsZcijOQHlTq5zfG8x3CMg= X-Received: by 127.0.0.2 with SMTP id NPYJYY1788612xlMiIZp2lRF; Tue, 19 Dec 2023 17:55:14 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web10.12738.1703037312815796096 for ; Tue, 19 Dec 2023 17:55:14 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="386173339" X-IronPort-AV: E=Sophos;i="6.04,290,1695711600"; d="scan'208";a="386173339" X-Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 17:55:12 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="776165839" X-IronPort-AV: E=Sophos;i="6.04,290,1695711600"; d="scan'208";a="776165839" X-Received: from liyi4-desktop.ccr.corp.intel.com ([10.239.153.29]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 17:55:10 -0800 From: "Li, Yi" To: devel@edk2.groups.io Cc: Yi Li , Michael D Kinney , Liming Gao , Zhiguang Liu Subject: [edk2-devel] [PATCH V2 1/2] MdePkg: Add DECLARE_LENGTH opcode of dependency expression Date: Wed, 20 Dec 2023 09:54:54 +0800 Message-ID: <20231220015455.1636-2-yi1.li@intel.com> In-Reply-To: <20231220015455.1636-1-yi1.li@intel.com> References: <20231220015455.1636-1-yi1.li@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,yi1.li@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: LRbuA9qJiSxPB3rUnNmUHS5vx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1703037315629100001 Content-Type: text/plain; charset="utf-8" To avoid messy parsing of the Depex section of a Capsule, it would be a lot easier for everyone involved if we preceded the Capsule Depex Section with a length declaration. It provides simple bounds checking to avoid having to parse the op-codes, but in the case of a malformed depex being parsed, avoid other issues which can be messy. Syntax DECLARE_LENGTH <32-bit Length> Description Declares an 32-bit byte length of the entire dependency expression. Behaviors and Restrictions This opcode must be the first one in a dependency expression. REF: UEFI spec 2.10 Table 23.4 Signed-off-by: Yi Li Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Reviewed-by: Liming Gao for this patch set.=20 Reviewed-by: Wei6 Xu --- MdePkg/Include/Protocol/FirmwareManagement.h | 29 ++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/MdePkg/Include/Protocol/FirmwareManagement.h b/MdePkg/Include/= Protocol/FirmwareManagement.h index f37067df3455..e535bb697d88 100644 --- a/MdePkg/Include/Protocol/FirmwareManagement.h +++ b/MdePkg/Include/Protocol/FirmwareManagement.h @@ -30,20 +30,21 @@ typedef struct _EFI_FIRMWARE_MANAGEMENT_PROTOCOL EFI_FI= RMWARE_MANAGEMENT_PROTOCO /// /// Dependency Expression Opcode /// -#define EFI_FMP_DEP_PUSH_GUID 0x00 -#define EFI_FMP_DEP_PUSH_VERSION 0x01 -#define EFI_FMP_DEP_VERSION_STR 0x02 -#define EFI_FMP_DEP_AND 0x03 -#define EFI_FMP_DEP_OR 0x04 -#define EFI_FMP_DEP_NOT 0x05 -#define EFI_FMP_DEP_TRUE 0x06 -#define EFI_FMP_DEP_FALSE 0x07 -#define EFI_FMP_DEP_EQ 0x08 -#define EFI_FMP_DEP_GT 0x09 -#define EFI_FMP_DEP_GTE 0x0A -#define EFI_FMP_DEP_LT 0x0B -#define EFI_FMP_DEP_LTE 0x0C -#define EFI_FMP_DEP_END 0x0D +#define EFI_FMP_DEP_PUSH_GUID 0x00 +#define EFI_FMP_DEP_PUSH_VERSION 0x01 +#define EFI_FMP_DEP_VERSION_STR 0x02 +#define EFI_FMP_DEP_AND 0x03 +#define EFI_FMP_DEP_OR 0x04 +#define EFI_FMP_DEP_NOT 0x05 +#define EFI_FMP_DEP_TRUE 0x06 +#define EFI_FMP_DEP_FALSE 0x07 +#define EFI_FMP_DEP_EQ 0x08 +#define EFI_FMP_DEP_GT 0x09 +#define EFI_FMP_DEP_GTE 0x0A +#define EFI_FMP_DEP_LT 0x0B +#define EFI_FMP_DEP_LTE 0x0C +#define EFI_FMP_DEP_END 0x0D +#define EFI_FMP_DEP_DECLARE_LENGTH 0x0E =20 /// /// Image Attribute - Dependency --=20 2.42.0.windows.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112738): https://edk2.groups.io/g/devel/message/112738 Mute This Topic: https://groups.io/mt/103274337/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Thu May 16 00:59:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+112739+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112739+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1703037316; cv=none; d=zohomail.com; s=zohoarc; b=LDMShSBwu0y2PozVeoMyWhHFinLnKI8B7YVjM8t8rstYo0Ur7Xzl4LcJ+PB8F/qnU4Zzg6eUgSolPwvrAdvZq87UtBQDL4e+hCigVlb4lcca5jx9tAw7GF2aExmAIuqlxTEK9ulRM1Cthgz8Z0HNHDVfCSQPZGXB/dsNavxV9UY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1703037316; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=2lcz6Fu8pcpVxoJlU9eqOAJuNwrvLhGXaSzGqgg91hk=; b=B8wvp0rAdA+T7A9HEFGb0SEOSPfuih4iwfuQRiA5lSbc4jLULPfrewhYCPQfzNqW7FaaUVgHUu88T2fR+mA1LyF4UnxFfZVF6CyrLGk2m/dRBBWAakM095zbdd+GDvWzO+u5FaUQwdOmDOM/wXqaFqjz+9nVv0zNriSshhE356E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112739+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1703037316779474.63349228450124; Tue, 19 Dec 2023 17:55:16 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=wQlNISpkq8/CbUnNRCgtCLFzJbGuQEcDl3n9Fx0Yx8E=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1703037316; v=1; b=JHj9traumheX5TPjxKeGu3A7GR9bpGI2LK44M6J9xnmMQVxpAojJ6tMBiLNoBtEWVRsJWprH 3CPNRv2N8SdXvvy23DwJ61UhCgc0sQexG5f0aSt575wQ6zSBohZg7+FsfCHMZuCEq2zkJJtbYLw is6TqVZB9kX7f7uKxAwco9GE= X-Received: by 127.0.0.2 with SMTP id mp4nYY1788612xOsuLT91GiQ; Tue, 19 Dec 2023 17:55:16 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web11.12597.1703037315773288772 for ; Tue, 19 Dec 2023 17:55:15 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="386173346" X-IronPort-AV: E=Sophos;i="6.04,290,1695711600"; d="scan'208";a="386173346" X-Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 17:55:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="776165847" X-IronPort-AV: E=Sophos;i="6.04,290,1695711600"; d="scan'208";a="776165847" X-Received: from liyi4-desktop.ccr.corp.intel.com ([10.239.153.29]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 17:55:12 -0800 From: "Li, Yi" To: devel@edk2.groups.io Cc: Yi Li , Liming Gao , Michael D Kinney , Wei6 Xu Subject: [edk2-devel] [PATCH V2 2/2] FmpDevicePkg: Add DECLARE_LENGTH opcode of dependency expression Date: Wed, 20 Dec 2023 09:54:55 +0800 Message-ID: <20231220015455.1636-3-yi1.li@intel.com> In-Reply-To: <20231220015455.1636-1-yi1.li@intel.com> References: <20231220015455.1636-1-yi1.li@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,yi1.li@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: HVKYTCXCG2fBdJrwPKYsaPAJx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1703037317645100009 Content-Type: text/plain; charset="utf-8" To avoid messy parsing of the Depex section of a Capsule, it would be a lot easier for everyone involved if we preceded the Capsule Depex Section with a length declaration. It provides simple bounds checking to avoid having to parse the op-codes, but in the case of a malformed depex being parsed, avoid other issues which can be messy. Syntax DECLARE_LENGTH <32-bit Length> Description Declares an 32-bit byte length of the entire dependency expression. Behaviors and Restrictions This opcode must be the first one in a dependency expression. REF: UEFI spec 2.10 Table 23.4 Signed-off-by: Yi Li Cc: Liming Gao Cc: Michael D Kinney Cc: Wei6 Xu Reviewed-by: Liming Gao for this patch set.=20 Reviewed-by: Wei6 Xu --- .../FmpDependencyLib/FmpDependencyLib.c | 35 ++++++++ .../PrivateInclude/FmpLastAttemptStatus.h | 3 + .../EvaluateDependencyUnitTest.c | 84 ++++++++++++++++--- 3 files changed, 110 insertions(+), 12 deletions(-) diff --git a/FmpDevicePkg/Library/FmpDependencyLib/FmpDependencyLib.c b/Fmp= DevicePkg/Library/FmpDependencyLib/FmpDependencyLib.c index 76a1ee3f40db..50662e74e065 100644 --- a/FmpDevicePkg/Library/FmpDependencyLib/FmpDependencyLib.c +++ b/FmpDevicePkg/Library/FmpDependencyLib/FmpDependencyLib.c @@ -234,6 +234,7 @@ EvaluateDependency ( GUID ImageTypeId; UINT32 Version; UINT32 LocalLastAttemptStatus; + UINT32 DeclaredLength; =20 LocalLastAttemptStatus =3D LAST_ATTEMPT_STATUS_SUCCESS; =20 @@ -489,6 +490,37 @@ EvaluateDependency ( } =20 return Element1.Value.Boolean; + case EFI_FMP_DEP_DECLARE_LENGTH: + if (Iterator + sizeof (UINT32) >=3D (UINT8 *)Dependencies->Depende= ncies + DependenciesSize ) { + DEBUG ((DEBUG_ERROR, "EvaluateDependency: DECLARE_LENGTH extends= beyond end of dependency expression!\n")); + LocalLastAttemptStatus =3D LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ER= ROR_DECLARE_LENGTH_BEYOND_DEPEX; + goto Error; + } + + // + // This opcode must be the first one in a dependency expression. + // + if (Iterator !=3D Dependencies->Dependencies) { + DEBUG ((DEBUG_ERROR, "EvaluateDependency: DECLARE_LENGTH is not = the first opcode!\n")); + LocalLastAttemptStatus =3D LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ER= ROR_DECLARE_LENGTH_NOT_FIRST_OPCODE; + goto Error; + } + + DeclaredLength =3D *(UINT32 *)(Iterator + 1); + if (DeclaredLength !=3D DependenciesSize) { + DEBUG ((DEBUG_ERROR, "EvaluateDependency: DECLARE_LENGTH is not = equal to length of dependency expression!\n")); + LocalLastAttemptStatus =3D LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ER= ROR_DECLARE_LENGTH_INCORRECT; + goto Error; + } + + Status =3D Push (DeclaredLength, VersionType); + if (EFI_ERROR (Status)) { + LocalLastAttemptStatus =3D LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ER= ROR_PUSH_FAILURE; + goto Error; + } + + Iterator =3D Iterator + sizeof (UINT32); + break; default: DEBUG ((DEBUG_ERROR, "EvaluateDependency: Unknown Opcode - %02x!\n= ", *Iterator)); LocalLastAttemptStatus =3D LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERRO= R_UNKNOWN_OPCODE; @@ -574,6 +606,9 @@ ValidateDependency ( } =20 return TRUE; + case EFI_FMP_DEP_DECLARE_LENGTH: + Depex +=3D sizeof (UINT32) + 1; + break; default: return FALSE; } diff --git a/FmpDevicePkg/PrivateInclude/FmpLastAttemptStatus.h b/FmpDevice= Pkg/PrivateInclude/FmpLastAttemptStatus.h index 39a55dd2c643..aaa3334909c8 100644 --- a/FmpDevicePkg/PrivateInclude/FmpLastAttemptStatus.h +++ b/FmpDevicePkg/PrivateInclude/FmpLastAttemptStatus.h @@ -66,6 +66,9 @@ enum LAST_ATTEMPT_STATUS_EXPANDED_ERROR_LIST { LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_FMP_NOT_FOUND, LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE, LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE, + LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_DECLARE_LENGTH_NOT_FIRST_OPCODE, + LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_DECLARE_LENGTH_BEYOND_DEPEX, + LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_DECLARE_LENGTH_INCORRECT, =20 /// /// Last attempt status codes used in FmpDependencyCheckLib diff --git a/FmpDevicePkg/Test/UnitTest/Library/FmpDependencyLib/EvaluateDe= pendencyUnitTest.c b/FmpDevicePkg/Test/UnitTest/Library/FmpDependencyLib/Ev= aluateDependencyUnitTest.c index 0edb7f67306f..352887af2c5e 100644 --- a/FmpDevicePkg/Test/UnitTest/Library/FmpDependencyLib/EvaluateDependenc= yUnitTest.c +++ b/FmpDevicePkg/Test/UnitTest/Library/FmpDependencyLib/EvaluateDependenc= yUnitTest.c @@ -125,19 +125,75 @@ static UINT8 mExpression11[] =3D { EFI_FMP_DEP_END }; =20 +// Valid Dependency Expression 7: With correct declared length +static UINT8 mExpression12[] =3D { + EFI_FMP_DEP_DECLARE_LENGTH, 0x35, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_VERSION, 0x01, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0xFA, 0x4D, 0x14, 0x97,0x8E, 0xEB, 0x4D, 0x= D1, 0x8B, 0x4D, 0x39, 0x88, 0x24, 0x96, 0x56, 0x42, + EFI_FMP_DEP_GT, + EFI_FMP_DEP_PUSH_VERSION, 0x03, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0x70, 0x73, 0x2A, 0xA4,0x3A, 0x43, 0x4D, 0x= 68, 0x9A, 0xA1, 0xDE, 0x62, 0x23, 0x30, 0x6C, 0xF3, + EFI_FMP_DEP_GTE, + EFI_FMP_DEP_AND, + EFI_FMP_DEP_END +}; + +// Valid Dependency Expression 7: With longer declared length +static UINT8 mExpression13[] =3D { + EFI_FMP_DEP_DECLARE_LENGTH, 0x3B, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_VERSION, 0x01, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0xFA, 0x4D, 0x14, 0x97,0x8E, 0xEB, 0x4D, 0x= D1, 0x8B, 0x4D, 0x39, 0x88, 0x24, 0x96, 0x56, 0x42, + EFI_FMP_DEP_GT, + EFI_FMP_DEP_PUSH_VERSION, 0x03, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0x70, 0x73, 0x2A, 0xA4,0x3A, 0x43, 0x4D, 0x= 68, 0x9A, 0xA1, 0xDE, 0x62, 0x23, 0x30, 0x6C, 0xF3, + EFI_FMP_DEP_GTE, + EFI_FMP_DEP_AND, + EFI_FMP_DEP_END +}; + +// Valid Dependency Expression 7: With shorter declared length +static UINT8 mExpression14[] =3D { + EFI_FMP_DEP_DECLARE_LENGTH, 0x1B, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_VERSION, 0x01, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0xFA, 0x4D, 0x14, 0x97,0x8E, 0xEB, 0x4D, 0x= D1, 0x8B, 0x4D, 0x39, 0x88, 0x24, 0x96, 0x56, 0x42, + EFI_FMP_DEP_GT, + EFI_FMP_DEP_PUSH_VERSION, 0x03, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0x70, 0x73, 0x2A, 0xA4,0x3A, 0x43, 0x4D, 0x= 68, 0x9A, 0xA1, 0xDE, 0x62, 0x23, 0x30, 0x6C, 0xF3, + EFI_FMP_DEP_GTE, + EFI_FMP_DEP_AND, + EFI_FMP_DEP_END +}; + +// Valid Dependency Expression 7: DECLARE_LENGTH opcode is not first one +static UINT8 mExpression15[] =3D { + EFI_FMP_DEP_PUSH_VERSION, 0x01, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0xFA, 0x4D, 0x14, 0x97,0x8E, 0xEB, 0x4D, 0x= D1, 0x8B, 0x4D, 0x39, 0x88, 0x24, 0x96, 0x56, 0x42, + EFI_FMP_DEP_GT, + EFI_FMP_DEP_DECLARE_LENGTH, 0x35, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_VERSION, 0x03, 0x00, 0x00, 0x00, + EFI_FMP_DEP_PUSH_GUID, 0x70, 0x73, 0x2A, 0xA4,0x3A, 0x43, 0x4D, 0x= 68, 0x9A, 0xA1, 0xDE, 0x62, 0x23, 0x30, 0x6C, 0xF3, + EFI_FMP_DEP_GTE, + EFI_FMP_DEP_AND, + EFI_FMP_DEP_END +}; + // ------------------------------------------------Test Depex------Depex S= ize----------------Expected Result -static BASIC_TEST_CONTEXT mBasicTestTrue1 =3D { mExpression1, sizeof (= mExpression1), TRUE }; -static BASIC_TEST_CONTEXT mBasicTestTrue2 =3D { mExpression2, sizeof (= mExpression2), TRUE }; -static BASIC_TEST_CONTEXT mBasicTestFalse1 =3D { mExpression3, sizeof (= mExpression3), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestFalse2 =3D { mExpression4, sizeof (= mExpression4), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid1 =3D { mExpression1, sizeof (= mExpression1) - 1, FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid2 =3D { mExpression5, sizeof (= mExpression5), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid3 =3D { mExpression6, sizeof (= mExpression6), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid4 =3D { mExpression7, sizeof (= mExpression7), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid5 =3D { mExpression8, sizeof (= mExpression8), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid6 =3D { mExpression9, sizeof (= mExpression9), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid7 =3D { mExpression10, sizeof = (mExpression10), FALSE }; -static BASIC_TEST_CONTEXT mBasicTestInvalid8 =3D { mExpression11, sizeof = (mExpression11), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestTrue1 =3D { mExpression1, sizeof = (mExpression1), TRUE }; +static BASIC_TEST_CONTEXT mBasicTestTrue2 =3D { mExpression2, sizeof = (mExpression2), TRUE }; +static BASIC_TEST_CONTEXT mBasicTestFalse1 =3D { mExpression3, sizeof = (mExpression3), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestFalse2 =3D { mExpression4, sizeof = (mExpression4), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid1 =3D { mExpression1, sizeof = (mExpression1) - 1, FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid2 =3D { mExpression5, sizeof = (mExpression5), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid3 =3D { mExpression6, sizeof = (mExpression6), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid4 =3D { mExpression7, sizeof = (mExpression7), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid5 =3D { mExpression8, sizeof = (mExpression8), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid6 =3D { mExpression9, sizeof = (mExpression9), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid7 =3D { mExpression10, sizeof= (mExpression10), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid8 =3D { mExpression11, sizeof= (mExpression11), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestValid1 =3D { mExpression12, sizeof= (mExpression12), TRUE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid9 =3D { mExpression13, sizeof= (mExpression13), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid10 =3D { mExpression14, sizeof= (mExpression14), FALSE }; +static BASIC_TEST_CONTEXT mBasicTestInvalid11 =3D { mExpression15, sizeof= (mExpression15), FALSE }; =20 /** Unit test for EvaluateDependency() API of the FmpDependencyLib. @@ -233,6 +289,10 @@ UnitTestingEntry ( AddTestCase (DepexEvalTests, "Error: Operand and operator mismatch", "Te= st10", EvaluateDependencyTest, NULL, NULL, &mBasicTestInvalid6); AddTestCase (DepexEvalTests, "Error: GUID is NOT FOUND", "Test11", Evalu= ateDependencyTest, NULL, NULL, &mBasicTestInvalid7); AddTestCase (DepexEvalTests, "Error: Stack Underflow", "Test12", Evaluat= eDependencyTest, NULL, NULL, &mBasicTestInvalid8); + AddTestCase (DepexEvalTests, "Evaluate to True - 3", "Test13", EvaluateD= ependencyTest, NULL, NULL, &mBasicTestValid1); + AddTestCase (DepexEvalTests, "Error: Declared length too long", "Test14"= , EvaluateDependencyTest, NULL, NULL, &mBasicTestInvalid9); + AddTestCase (DepexEvalTests, "Error: Declared length too short", "Test15= ", EvaluateDependencyTest, NULL, NULL, &mBasicTestInvalid10); + AddTestCase (DepexEvalTests, "Error: DECLARE_LENGTH is not first opcode"= , "Test16", EvaluateDependencyTest, NULL, NULL, &mBasicTestInvalid11); =20 // // Execute the tests. --=20 2.42.0.windows.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112739): https://edk2.groups.io/g/devel/message/112739 Mute This Topic: https://groups.io/mt/103274338/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-