From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.92.4.102]) by mx.groups.io with SMTP id smtpd.web11.8880.1603152000356602395 for ; Mon, 19 Oct 2020 17:00:00 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@outlook.com header.s=selector1 header.b=JrWI6Jj5; spf=pass (domain: outlook.com, ip: 40.92.4.102, mailfrom: michael.kubacki@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XcfcY0t9vKRvdmOwPfQjCnOwul/5BLwETx8+S85TSZ0VoC0Enibbwk0obS9atn++jEjmOUft04cAMuPFwxBhR5njpc3Jit8iWxKH+GH5A4TRQWH+e5EniYWQafw4m2E4J/d+9wHTgaKa/8j1lTqtnNlhlcHWeqjH+I8PCHUvB5oaPYKGHS7MfGHDeIGmGCJ/oUyK5W6FoVIbLm7dYm+2ppqbcTneZbZUeJJM3TYW42PfmR6qmeO4dqbncOUQgVfXXAQjTVza5Ufz/4oex/S/DCSqQyIjGxfB00mofdR2UiwEuIGTRBC4Qy6Zbp605VxsnVtdQ9qc9ZqvLtyPP+HrKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ncFL7Yml7K/NrMIC3Qr5imBd3LJTQhvTupQEdIWf74Y=; b=cff4GETlKnXXLrbrwLF7yV34p1UotXdD7qzXR1opveFiuzCjPNcnQOWlIKZBKQhGnzwDnfvPzqmSI1xgXrtVL/e5yjfFgqd/AQqTL8bqwNT7FuDjYu/gBtBSB685bfcNmtj/o38PBngvK3s9RZZ505pXHKXLIRm6bhNSZxM+BeVwHoUcvCmX8Q2UnNW3wSbolzHSA0dPgcaSjaZ5Ea6Rbjg6SDXJHpPaKQfSJUZJ4kAZUEx9Z6ZPSBDpg/TnJbNHrkuMZNlfilG4bJ3fTLh2KCW2xDsEOoeNnbHL6FXG9WZ4Os02bFNs3JbfmaYtnvVsbarDhkDb87sG2Bkd/nmpVQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ncFL7Yml7K/NrMIC3Qr5imBd3LJTQhvTupQEdIWf74Y=; b=JrWI6Jj5J11b0KZSk+X/wsPrcaEF4d+RFFbKk2EDr31RMlexTaHTUpCQaQn6QeJHYJdTaS/0TyY33JdVJ+V1XjxVWToDmKq22FDLEZ+0ry1w8EmnuT6jVFom/3pfX3Oiz5rvmSs5iTTDbKYVS8gxYnB8Sm55m4ZbOj4iMn+szw/kMA00xFEbwdcBzGZbBRutP7eqK7EddMRKkLXP3X/emng6b8zxiS8KY0oS1G5IXfFlAbguSs+/rNRR3iHBGVVsn5uB7EuJqCll8qCPvIf5YnSloXiwJimZh7ULcz44N0GZjbsIQTIUmEA2wALYpGbleRkH07if6gW/upHxiviCBw== Received: from CY1NAM02FT029.eop-nam02.prod.protection.outlook.com (10.152.74.58) by CY1NAM02HT094.eop-nam02.prod.protection.outlook.com (10.152.74.226) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Mon, 19 Oct 2020 23:59:59 +0000 Received: from MWHPR07MB3440.namprd07.prod.outlook.com (2a01:111:e400:7e45::4e) by CY1NAM02FT029.mail.protection.outlook.com (2a01:111:e400:7e45::399) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21 via Frontend Transport; Mon, 19 Oct 2020 23:59:59 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:D781C081A8CAF609CC6F16CF70B3F648609AF3B1B74EAB1A38E41BFA24E15665;UpperCasedChecksum:EB78CE9395345BB23750D713F781FF80D9B891F976CB8C976ADED02C30B693DE;SizeAsReceived:7554;Count:45 Received: from MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::858f:bd50:1b65:e803]) by MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::858f:bd50:1b65:e803%7]) with mapi id 15.20.3477.028; Mon, 19 Oct 2020 23:59:59 +0000 From: "Michael Kubacki" To: devel@edk2.groups.io CC: Liming Gao , Michael D Kinney , Guomin Jiang , Wei6 Xu , Zhiguang Liu Subject: [PATCH v6 0/6] Extend Last Attempt Status Usage Date: Mon, 19 Oct 2020 16:59:33 -0700 Message-ID: X-Mailer: git-send-email 2.28.0.windows.1 X-TMN: [E/oSzWXAsNlnPG+t+Oy0cMWt6DT11aKFgXAzLgpGPOm25F9GEzCiI/mZldiLMvDO] X-ClientProxiedBy: MWHPR14CA0067.namprd14.prod.outlook.com (2603:10b6:300:81::29) To MWHPR07MB3440.namprd07.prod.outlook.com (2603:10b6:301:69::28) Return-Path: michael.kubacki@outlook.com X-Microsoft-Original-Message-ID: <20201019235939.2320-1-michael.kubacki@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (2001:4898:80e8:2:819c:275:72be:ff50) by MWHPR14CA0067.namprd14.prod.outlook.com (2603:10b6:300:81::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21 via Frontend Transport; Mon, 19 Oct 2020 23:59:58 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 45 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: aa5016ac-9e19-43e1-7d46-08d8748b15c9 X-MS-TrafficTypeDiagnostic: CY1NAM02HT094: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ArBC10Wtdr9eqvf6xhkvzBnsONvLXg2m2YeWyvzQNZDwDq6p8BVMO0qU+gU/k1nbT3gyw7d7mB8rtK5AoROb27DK7tkYewuq0WNriUQD2CB09zPURD2nzYCIml7CWW/K0obpIIrUMjeSe8U7Uw8BLm8+lhbRuAgl0ILcLPXf1Xz3jKadWBHf7hlMeoq5onu+757dpSNvtmd0jYY+J5DcIpxcqqbzFwMdVgTnrzJpRXh1jyDD+FQ5ysn+PWOeEaYy X-MS-Exchange-AntiSpam-MessageData: YKTE4Fn5SSuLk2eQCQqPfD/TkYw7kqQ33sOqKpOQ3XSa4+G9MFiuoOp6CoiI+DBvo8ccMlTRSvzUTPjOMCPYDJmMz1LRTe1HEmyvEHYUWDJx4JBk3yayVpqqqWKBPLLSssYjy9dTP7AQKn0gVb9LYkpee2qtQ+Ff0egCnatXqDtUMQ1zG3G/kHuNzLuNq9glrdMy12FA+EeF43fECxWK3A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa5016ac-9e19-43e1-7d46-08d8748b15c9 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2020 23:59:58.9886 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: CY1NAM02FT029.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1NAM02HT094 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain From: Michael Kubacki REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D2802 This patch series adds more granularity to Last Attempt Status codes reported during FMP check image and set image operations that greatly improve precision of the status codes. The unsuccessful vendor range (0x1000 - 0x4000) was introduced in UEFI Specification 2.8. At a high-level, two subranges are defined within that range in this patch series: 1. The FMP Reserved range - reserved for components implemented in FmpDevicePkg. 2. The FMP Device Library Reserved range - reserved for FmpDeviceLib instance-specific usage. The ranges are described in a public header file LastAttemptStatus.h while the specific codes used within FmpDevicePkg implementation are defined in a private header file FmpLastAttemptStatus.h. FmpDeviceLib instances should use the range definition from the public header file to define Last Attempt Status codes local to their library instance. Of note, there's multiple approaches to assigning private status codes in the FMP Reserved range. For example, individual components could define their last attempt status codes locally with the range allocated to the component defined in a package-wide private header file. However, one goal of the granularity being introduced is to provide straightforward traceability to an error source. For that reason, it was chosen to define a constant set of codes at the package level in FmpLastAttemptStatus.h. For example, if a new FmpDependencyLib instance is added, it would not be able to reassign status code values in the pre-existing FMP Dependency range; it would reuse codes for the same error source and be able to add new codes onto the range for its usage. V6 changes: 1. FmpDevicePkg/Library/FmpDeviceLibNull * Updated FmpDeviceCheckImage() and FmpDeviceSetImage() to call FmpDeviceCheckImageWithStatus() and FmpDeviceSetImageWithStatus() respectively. This is to clearly demonstrate to FmpDeviceLib implementors that only the *WithStatus() versions need to be implemented. 2. FmpDevicePkg/PrivateInclude/FmpLastAttemptStatus.h * Updated the block comment above the FmpDependencyCheckLib definitions to use /// instead of // to be consistent with the rest of the file. V5 changes: 1. Fixed an issue where LAST_ATTEMPT_STATUS_DRIVER_ERROR_INVALID_CERTIFICATE is changed to LAST_ATTEMPT_STATUS_DRIVER_ERROR_IMAGE_AUTH_FAILURE in the logic to return the last attempt status code in CheckTheImageInternal(). V4 changes: 1. Simplified range value definitions in LastAttemptStatus.h. Directly assign the values in the macro definition instead of using calculations. 2. Adjusted range sizes to leave more room for future expansion. OLD: START | END | Usage ------------------------------------------------| 0x1000 | 0x1FFF | FmpDevicePkg | 0x1000 | 0x107F | FmpDxe driver | 0x1080 | 0x109F | FMP dependency Libs | 0x2000 | 0x3FFF | FmpDeviceLib instances | NEW: START | END | Usage ----------------------------------------------------------------| 0x1000 | 0x17FF | FmpDevicePkg | 0x1000 | 0x107F | FmpDxe driver | 0x1080 | 0x109F | FmpDependencyLib | 0x10A0 | 0x10BF | FmpDependencyCheckLib | 0x10C0 | 0x17FF | Unused. Available for future expansion. | 0x1800 | 0x1FFF | FmpDeviceLib instances implementation | 0x2000 | 0x3FFF | Unused. Available for future expansion. | 3. Broke the single range in v3 for FMP Dependency libraries into separate ranges. 4. Clarified LastAttemptStatus return values in each function description. 5. Returned an expected LastAttemptStatus value for some functions that previously did not return a value. 6. Reverted changes in FmpDxe to call the new FmpDeviceLib APIs for FmpDeviceCheckImage () and FmpDeviceSetImage (). These will be added in a future series after impacted platforms in edk2-platforms are updated to use the new APIs. 7. Instead of directly changing the pre-existing APIs in FmpDeviceLib to add a LastAttemptStatus parameter, the new functions were added to the library interface: * FmpDeviceCheckImageWithStatus () * FmpDeviceSetImageWithStatus () V3 changes: 1. Enhanced range definitions in LastAttemptStatus.h with more completeness providing length, min, and max values. 2. Moved the actual Last Attempt Status code assignments to a private header file PrivateInclude/FmpLastAttemptStatus.h. 3. Changed the value of LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MAX to 0x3FFF instead of 0x4000 even though 0x4000 is defined in the UEFI specification. The length is 0x4000 but the max allowed value should be 0x3FFF. This change was made now to prevent implementation compatibility issues in the future. 4. Included "DEVICE" in the following macro name to clearly associate it with the FmpDeviceLib library class: LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_ERROR_xxx 5. Included a map to help the reader better visualize the range definitions in LastAttemptStatus.h. 6. Included additional documentation describing the enum in FmpLastAttemptStatus.h. An explicit statement stating that new codes should be added onto the end of ranges to preserve the values was added. 7. Simplified error handling logic in FmpDxe for FmpDeviceLib calls that return Last Attempt Status. 8. V2 had a single memory allocation failure code used for different memory allocations in CheckFmpDependency () in FmpDependencyLib. Each potential allocation failure was assigned a unique code. V2 changes: 1. Consolidate all previous incremental updates to=20 LastAttemptStatus.h into one patch (patch 2) 2. Move LastAttemptStatus.h from Include to PrivateInclude 3. Correct patch 1 subject from "FmpDevicePkg" to "MdePkg" Cc: Liming Gao Cc: Michael D Kinney Cc: Guomin Jiang Cc: Wei6 Xu Cc: Zhiguang Liu Signed-off-by: Michael Kubacki Michael Kubacki (6): MdePkg/SystemResourceTable.h: Add vendor range values FmpDevicePkg: Add Last Attempt Status header files FmpDevicePkg/FmpDxe: Add check image path Last Attempt Status capability FmpDevicePkg/FmpDxe: Improve set image path Last Attempt Status granularity FmpDevicePkg: Add Last Attempt Status support to dependency libs FmpDevicePkg/FmpDeviceLib: Add Last Attempt Status to Check/Set API FmpDevicePkg/FmpDxe/FmpDxe.c = | 146 +++++++++++++++++--- FmpDevicePkg/Library/FmpDependencyCheckLib/FmpDependencyCheckLib.c = | 39 ++++-- FmpDevicePkg/Library/FmpDependencyCheckLibNull/FmpDependencyCheckLibNull.c= | 14 +- FmpDevicePkg/Library/FmpDependencyLib/FmpDependencyLib.c = | 93 +++++++++++-- FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLib.c = | 144 ++++++++++++++++++- FmpDevicePkg/Test/UnitTest/Library/FmpDependencyLib/EvaluateDependencyUnit= Test.c | 7 +- FmpDevicePkg/FmpDxe/FmpDxe.h = | 4 +- FmpDevicePkg/Include/LastAttemptStatus.h = | 81 +++++++++++ FmpDevicePkg/Include/Library/FmpDependencyCheckLib.h = | 8 +- FmpDevicePkg/Include/Library/FmpDependencyLib.h = | 44 ++++-- FmpDevicePkg/Include/Library/FmpDeviceLib.h = | 121 +++++++++++++++- FmpDevicePkg/PrivateInclude/FmpLastAttemptStatus.h = | 81 +++++++++++ MdePkg/Include/Guid/SystemResourceTable.h = | 13 ++ 13 files changed, 730 insertions(+), 65 deletions(-) create mode 100644 FmpDevicePkg/Include/LastAttemptStatus.h create mode 100644 FmpDevicePkg/PrivateInclude/FmpLastAttemptStatus.h --=20 2.28.0.windows.1