From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (NAM12-DM6-obe.outbound.protection.outlook.com [40.92.22.42]) by mx.groups.io with SMTP id smtpd.web11.1472.1596784568723109554 for ; Fri, 07 Aug 2020 00:16:08 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@outlook.com header.s=selector1 header.b=FInZW63W; spf=pass (domain: outlook.com, ip: 40.92.22.42, mailfrom: michael.kubacki@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XISRsgkXXudcwvLYdOr4sU/BnsikjjTh+3KVIccO/cTOhXKHYnYTWTE6Hhafr7mLlIQQu+8tYmTT5E800NUG6b969O0djgt3sbmufog9jIsUWrXP+cVNgQv1E9/11y2O5dCzvHSwj9vZAwwpEItiC2kgK7mdqUqUaZtJZhEcDoaiTT1ri2ilN36FFTA5hnlCKTUJPBeGYAzhyg47hpdBmkyzaGi9WB18OIuzOZp3LgQsdlLdBf0fiWoQ6jLp8/IwBjxVjtZKhtpfQ96QDGRuRrNQaeF6gXdMV+R67Gd5cTx7eGVUQdFga9zpfcif3XLySvf2tlFB9CmzbVvKihXFiQ== 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=hrq9Cw3we1Ci6olUcj82XdHYqss0v4lAbzX8qGWVPt8=; b=Jsq4MrNKJK5hfNCXUy7yuf91xzQQiL8y9lc+WC4bxoYKp4UrvVs0ZIzZckKNj2XdM+XF2+KkoAx8m2CafBjhN+2xW/nRIl6UPRS++wAR0vflxDkcWBBAktd63UYPRinzxEQ6SRpaWzzxi+bLHdyTiK9ttwICaAzEgeNYXYJEvnhz4YFASbunYbuu1GyXyTy6kHl84Ut3T/y+JPUxBx7crOq7olH4ENkWe2asSWdayksQOlAoRxMqN3Vp+QAVbpUyCki52OYx+yLknNh4PTmD+FC7ywI+7BeRZE+WYiOMluNiDWPwQ8O6FAsamBZTfeE94yzVvsuIENnak6vpav/ieg== 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=hrq9Cw3we1Ci6olUcj82XdHYqss0v4lAbzX8qGWVPt8=; b=FInZW63WKyPgWw2ZDMKAvMA2suiHhteVVPkQu9xTiaTWDmbid4gADbvsp2nVRnnSHHFHhO9elSJWm6g4AbADw6vmcES2PPCZuGlfkfKyyUrENWH6OkT5EJbP9ReTey5w13uZAjip9ybUuE8okqq4oNGv4WfD51HGZfIK8HDBxXN8XBvp2OdIuFzvJcEz3KvyX96GK419+SsNOv73f6aVwaLv/lD7nmBRnEEQCwS2Ix3Jq1I/hQzndLiDR94wdN8B6UBLBIWmGZXMWj8eEj3ufAsmvJY1nzFlbEurD3mmlwp/HrQzQ7YAkv730z9QLViF6+SDjnN0ghSYwxfiqA0vow== Received: from BN8NAM12FT047.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc66::4b) by BN8NAM12HT121.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc66::116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3261.10; Fri, 7 Aug 2020 07:16:07 +0000 Received: from MWHPR07MB3440.namprd07.prod.outlook.com (2a01:111:e400:fc66::49) by BN8NAM12FT047.mail.protection.outlook.com (2a01:111:e400:fc66::318) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3261.10 via Frontend Transport; Fri, 7 Aug 2020 07:16:07 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:D3644C22B3959AC3C6962D8E21655DF16BBD31389310BC744C1D7A7F6A5DB852;UpperCasedChecksum:0DAB9621277B237DCCFC272748BA164B5DB2A719FA1061F6342CCF986284A595;SizeAsReceived:7814;Count:49 Received: from MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::9856:570e:1735:974e]) by MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::9856:570e:1735:974e%7]) with mapi id 15.20.3261.019; Fri, 7 Aug 2020 07:16:07 +0000 From: "Michael Kubacki" To: devel@edk2.groups.io CC: Liming Gao , Michael D Kinney , Guomin Jiang , Wei6 Xu Subject: [PATCH v1 4/7] FmpDevicePkg/FmpDxe: Improve set image path Last Attempt Status granularity Date: Fri, 7 Aug 2020 00:15:23 -0700 Message-ID: X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20200807071526.1837-1-michael.kubacki@outlook.com> References: <20200807071526.1837-1-michael.kubacki@outlook.com> X-ClientProxiedBy: MWHPR15CA0042.namprd15.prod.outlook.com (2603:10b6:300:ad::28) To MWHPR07MB3440.namprd07.prod.outlook.com (2603:10b6:301:69::28) Return-Path: michael.kubacki@outlook.com X-Microsoft-Original-Message-ID: <20200807071526.1837-5-michael.kubacki@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (2001:4898:80e8:a:adbb:8e69:1fd3:409e) by MWHPR15CA0042.namprd15.prod.outlook.com (2603:10b6:300:ad::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3261.19 via Frontend Transport; Fri, 7 Aug 2020 07:16:06 +0000 X-Mailer: git-send-email 2.28.0.windows.1 X-Microsoft-Original-Message-ID: <20200807071526.1837-5-michael.kubacki@outlook.com> X-TMN: [RAAu+UB7Wvxoir2hV3f2JRcx0yQaCiREA5bCNDizvH45k+8x47rBlOLTY67THn6e] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 49 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 66ba3ab3-9481-4252-80e1-08d83aa1c099 X-MS-TrafficTypeDiagnostic: BN8NAM12HT121: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AbhjNklHYo3TbMqhf2RIVFjbZpYy053SWIEaALHscOeoCLHT4+J0Jnz9dpzlqdq5FjxSB8xYYScIuRlo/oVMYPoO3vOFxxDKJXfkrrrK9AF0jPIOmIqsXl0OMj/DFu0ONHSWhm9gjwH3O4teyD67baBDYiZrU2HM3P6upwwjiOTqVw5g0Z0bxIFB70NQcEz66RHNecKm08lH6uqoemvz5Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:0;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR07MB3440.namprd07.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:;DIR:OUT;SFP:1901; X-MS-Exchange-AntiSpam-MessageData: Ni5q7kTTp4Bt3zH4ht8IPXgKSAV8SNFyhTJm8G4emD3RCpUn3yIH8YtW1jaHKAngOSaYGo0iVrFylm6aEufGC71pek7EFYy6wrJJh06On0SpUDyfo2s+T2lP2wKIOFA9xVyt+BWfdJ7KRN1QqUtEglIgBJ63IDN/e2st1i7s01goUhdUt971lW8c+WmoqtwaIjKfqTjuFGBMhgcLdBhb4A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 66ba3ab3-9481-4252-80e1-08d83aa1c099 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Aug 2020 07:16:07.0535 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: BN8NAM12FT047.eop-nam12.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: BN8NAM12HT121 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain From: Michael Kubacki Increases the level of granularity for Last Attempt Status codes returned from SetTheImage() in FmpDxe. This allows better identification of the error that occurred in the set image operation using Last Attempt Status codes. Cc: Liming Gao Cc: Michael D Kinney Cc: Guomin Jiang Cc: Wei6 Xu Signed-off-by: Michael Kubacki --- FmpDevicePkg/FmpDxe/FmpDxe.c | 17 +++++++++++++---- FmpDevicePkg/Include/LastAttemptStatus.h | 7 +++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/FmpDevicePkg/FmpDxe/FmpDxe.c b/FmpDevicePkg/FmpDxe/FmpDxe.c index dc714f7e9cd4..aeb888c86bc3 100644 --- a/FmpDevicePkg/FmpDxe/FmpDxe.c +++ b/FmpDevicePkg/FmpDxe/FmpDxe.c @@ -1141,6 +1141,7 @@ SetTheImage ( if (This =3D=3D NULL) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - This is NULL.\n", mI= mageIdName)); Status =3D EFI_INVALID_PARAMETER; + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROTOCOL_ARG_MI= SSING; goto cleanup; } =20 @@ -1166,6 +1167,7 @@ SetTheImage ( // if (Private->FmpDeviceLocked) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - Device is already lo= cked. Can't update.\n", mImageIdName)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_DEVICE_LOCKED; Status =3D EFI_UNSUPPORTED; goto cleanup; } @@ -1173,12 +1175,9 @@ SetTheImage ( // // Call check image to verify the image // - Status =3D CheckTheImage (This, ImageIndex, Image, ImageSize, &Updateabl= e); + Status =3D CheckTheImageInternal (This, ImageIndex, Image, ImageSize, &U= pdateable, &LastAttemptStatus); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - Check The Image fail= ed with %r.\n", mImageIdName, Status)); - if (Status =3D=3D EFI_SECURITY_VIOLATION) { - LastAttemptStatus =3D LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR; - } goto cleanup; } =20 @@ -1194,6 +1193,7 @@ SetTheImage ( FmpHeader =3D GetFmpHeader ( (EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image,= ImageSize, DependenciesSize, &FmpPayloadSize ); if (FmpHeader =3D=3D NULL) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - GetFmpHeader failed.= \n", mImageIdName)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER; Status =3D EFI_ABORTED; goto cleanup; } @@ -1221,6 +1221,7 @@ SetTheImage ( =20 if (Progress =3D=3D NULL) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - Invalid progress cal= lback\n", mImageIdName)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROGRESS_CALLBA= CK_ERROR; Status =3D EFI_INVALID_PARAMETER; goto cleanup; } @@ -1241,6 +1242,7 @@ SetTheImage ( Status =3D CheckSystemPower (&BooleanValue); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemPower - A= PI call failed %r.\n", mImageIdName, Status)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_POWER_API= ; goto cleanup; } if (!BooleanValue) { @@ -1261,10 +1263,12 @@ SetTheImage ( Status =3D CheckSystemThermal (&BooleanValue); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemThermal -= API call failed %r.\n", mImageIdName, Status)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_THERM= AL_API; goto cleanup; } if (!BooleanValue) { Status =3D EFI_ABORTED; + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_THERMAL; DEBUG ( (DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemThermal - returned False. U= pdate not allowed due to System Thermal.\n", mImageIdName) @@ -1280,10 +1284,12 @@ SetTheImage ( Status =3D CheckSystemEnvironment (&BooleanValue); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemEnvironme= nt - API call failed %r.\n", mImageIdName, Status)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_ENV_A= PI; goto cleanup; } if (!BooleanValue) { Status =3D EFI_ABORTED; + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_SYSTEM_ENV; DEBUG ( (DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemEnvironment - returned False= . Update not allowed due to System Environment.\n", mImageIdName) @@ -1305,12 +1311,14 @@ SetTheImage ( Status =3D GetFmpPayloadHeaderSize (FmpHeader, FmpPayloadSize, &FmpHeade= rSize); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - GetFmpPayloadHeaderS= ize failed %r.\n", mImageIdName, Status)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER_= SIZE; goto cleanup; } =20 AllHeaderSize =3D GetAllHeaderSize ((EFI_FIRMWARE_IMAGE_AUTHENTICATION *= )Image, FmpHeaderSize + DependenciesSize); if (AllHeaderSize =3D=3D 0) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - GetAllHeaderSize fai= led.\n", mImageIdName)); + LastAttemptStatus =3D LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_ALL_HEADER_= SIZE; Status =3D EFI_ABORTED; goto cleanup; } @@ -1373,6 +1381,7 @@ SetTheImage ( =20 cleanup: mProgressFunc =3D NULL; + DEBUG ((DEBUG_INFO, "FmpDxe(%s): SetTheImage() LastAttemptStatus: %u.\n"= , mImageIdName, LastAttemptStatus)); SetLastAttemptStatusInVariable (Private, LastAttemptStatus); =20 if (Progress !=3D NULL) { diff --git a/FmpDevicePkg/Include/LastAttemptStatus.h b/FmpDevicePkg/Includ= e/LastAttemptStatus.h index e177b06c4b58..03af9027cf48 100644 --- a/FmpDevicePkg/Include/LastAttemptStatus.h +++ b/FmpDevicePkg/Include/LastAttemptStatus.h @@ -39,6 +39,12 @@ enum LAST_ATTEMPT_STATUS_EXPANDED_ERROR_LIST { LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER =3D LAST_ATTEM= PT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN, + LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROGRESS_CALLBACK_ERROR , + LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_POWER_API , + LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_THERMAL_API , + LAST_ATTEMPT_STATUS_DRIVER_ERROR_THERMAL , + LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_ENV_API , + LAST_ATTEMPT_STATUS_DRIVER_ERROR_SYSTEM_ENV , LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER_SIZE , LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_ALL_HEADER_SIZE , LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER_VERSION , @@ -49,6 +55,7 @@ enum LAST_ATTEMPT_STATUS_EXPANDED_ERROR_LIST LAST_ATTEMPT_STATUS_DRIVER_ERROR_INVALID_KEY_LENGTH , LAST_ATTEMPT_STATUS_DRIVER_ERROR_INVALID_KEY_LENGTH_VALUE , LAST_ATTEMPT_STATUS_DRIVER_ERROR_VERSION_TOO_LOW , + LAST_ATTEMPT_STATUS_DRIVER_ERROR_DEVICE_LOCKED , LAST_ATTEMPT_STATUS_DRIVER_ERROR_IMAGE_AUTH_FAILURE , LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROTOCOL_ARG_MISSING , LAST_ATTEMPT_STATUS_DRIVER_ERROR_MAX_ERROR_CODE =3D LAST_ATTEM= PT_STATUS_DRIVER_MAX_ERROR_CODE_VALUE --=20 2.28.0.windows.1