From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=chao.b.zhang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id E597B210D97B5 for ; Tue, 7 Aug 2018 05:17:02 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Aug 2018 05:17:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,455,1526367600"; d="scan'208";a="79620114" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga001.jf.intel.com with ESMTP; 07 Aug 2018 05:17:02 -0700 Received: from fmsmsx114.amr.corp.intel.com (10.18.116.8) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 7 Aug 2018 05:17:02 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX114.amr.corp.intel.com (10.18.116.8) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 7 Aug 2018 05:17:01 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.205]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.240]) with mapi id 14.03.0319.002; Tue, 7 Aug 2018 20:16:59 +0800 From: "Zhang, Chao B" To: Laszlo Ersek , edk2-devel-01 CC: "Yao, Jiewen" , Roman Bacik Thread-Topic: [PATCH v2 5/7] SecurityPkg/SecureBootConfigDxe: replace OpenFileByDevicePath() with UefiLib API Thread-Index: AQHUKyO4StC4nzVBa0ibd8mOUDxk7KS0OqzQ Date: Tue, 7 Aug 2018 12:16:58 +0000 Message-ID: References: <20180803121537.32123-1-lersek@redhat.com> <20180803121537.32123-6-lersek@redhat.com> In-Reply-To: <20180803121537.32123-6-lersek@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMDg3NTNjODItN2U4NC00NjM1LTllZGUtOTA2OGI2ZDFlNzlkIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiNHZRcE1OV0lFeDFONVB1XC9KQkZUaGMyWm5pRXJ5ZHVXeFp0NFlIa0JkQVl0Y0xHaUlEOTRBMmttYlNOYXh1S2sifQ== dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2 5/7] SecurityPkg/SecureBootConfigDxe: replace OpenFileByDevicePath() with UefiLib API X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Aug 2018 12:17:03 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by : Chao Zhang -----Original Message----- From: Laszlo Ersek [mailto:lersek@redhat.com]=20 Sent: Friday, August 3, 2018 8:16 PM To: edk2-devel-01 Cc: Zhang, Chao B ; Yao, Jiewen ; Roman Bacik Subject: [PATCH v2 5/7] SecurityPkg/SecureBootConfigDxe: replace OpenFileBy= DevicePath() with UefiLib API Replace the OpenFileByDevicePath() function with EfiOpenFileByDevicePath() = from UefiLib, correcting the following issues: - imprecise comments on OpenFileByDevicePath(), - code duplication between this module and other modules, - local variable name "EfiSimpleFileSystemProtocol" starting with "Efi" prefix, - bogus "FileHandle =3D NULL" assignments, - leaking "Handle1" when the device path type/subtype check or the realignment-motivated AllocateCopyPool() fails in the loop, - stale SHELL_FILE_HANDLE reference in a comment. Cc: Chao Zhang Cc: Jiewen Yao Cc: Roman Bacik Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1008 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek Reviewed-by: Chao Zhang Reviewed-by: Jaben Carsey --- Notes: v2: =20 - pick up Chao's and Jaben's R-b's =20 - insert a space character between "EfiOpenFileByDevicePath" and "(" -- it was missing from the pre-patch code too SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.= inf | 1 - SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigFile= Explorer.c | 151 +------------------- 2 files changed, 1 insertion(+), 151 deletions(-) diff --git a/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBo= otConfigDxe.inf b/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/Sec= ureBootConfigDxe.inf index 487fc8cda917..caf95ddac7d9 100644 --- a/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfi= gDxe.inf +++ b/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootCo +++ nfigDxe.inf @@ -114,7 +114,6 @@ [Guids] [Protocols] gEfiHiiConfigAccessProtocolGuid ## PRODUCES gEfiDevicePathProtocolGuid ## PRODUCES - gEfiSimpleFileSystemProtocolGuid ## SOMETIMES_CONSUMES gEfiBlockIoProtocolGuid ## SOMETIMES_CONSUMES =20 [Depex] diff --git a/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBo= otConfigFileExplorer.c b/SecurityPkg/VariableAuthenticated/SecureBootConfig= Dxe/SecureBootConfigFileExplorer.c index 2a26c20f394c..aef85c470143 100644 --- a/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfi= gFileExplorer.c +++ b/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootCo +++ nfigFileExplorer.c @@ -80,155 +80,6 @@ CleanUpPage ( ); } =20 -/** - This function will open a file or directory referenced by DevicePath. - - This function opens a file with the open mode according to the file path= . The - Attributes is valid only for EFI_FILE_MODE_CREATE. - - @param[in, out] FilePath On input, the device path to the file. - On output, the remaining device path. - @param[out] FileHandle Pointer to the file handle. - @param[in] OpenMode The mode to open the file with. - @param[in] Attributes The file's file attributes. - - @retval EFI_SUCCESS The information was set. - @retval EFI_INVALID_PARAMETER One of the parameters has an invalid va= lue. - @retval EFI_UNSUPPORTED Could not open the file path. - @retval EFI_NOT_FOUND The specified file could not be found o= n the - device or the file system could not be = found on - the device. - @retval EFI_NO_MEDIA The device has no medium. - @retval EFI_MEDIA_CHANGED The device has a different medium in it= or the - medium is no longer supported. - @retval EFI_DEVICE_ERROR The device reported an error. - @retval EFI_VOLUME_CORRUPTED The file system structures are corrupte= d. - @retval EFI_WRITE_PROTECTED The file or medium is write protected. - @retval EFI_ACCESS_DENIED The file was opened read only. - @retval EFI_OUT_OF_RESOURCES Not enough resources were available to = open the - file. - @retval EFI_VOLUME_FULL The volume is full. -**/ -EFI_STATUS -EFIAPI -OpenFileByDevicePath( - IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath, - OUT EFI_FILE_HANDLE *FileHandle, - IN UINT64 OpenMode, - IN UINT64 Attributes - ) -{ - EFI_STATUS Status; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *EfiSimpleFileSystemProtocol; - EFI_FILE_PROTOCOL *Handle1; - EFI_FILE_PROTOCOL *Handle2; - EFI_HANDLE DeviceHandle; - CHAR16 *PathName; - UINTN PathLength; - - if ((FilePath =3D=3D NULL || FileHandle =3D=3D NULL)) { - return EFI_INVALID_PARAMETER; - } - - Status =3D gBS->LocateDevicePath ( - &gEfiSimpleFileSystemProtocolGuid, - FilePath, - &DeviceHandle - ); - if (EFI_ERROR (Status)) { - return Status; - } - - Status =3D gBS->OpenProtocol( - DeviceHandle, - &gEfiSimpleFileSystemProtocolGuid, - (VOID**)&EfiSimpleFileSystemProtocol, - gImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return Status; - } - - Status =3D EfiSimpleFileSystemProtocol->OpenVolume(EfiSimpleFileSystemPr= otocol, &Handle1); - if (EFI_ERROR (Status)) { - FileHandle =3D NULL; - return Status; - } - - // - // go down directories one node at a time. - // - while (!IsDevicePathEnd (*FilePath)) { - // - // For file system access each node should be a file path component - // - if (DevicePathType (*FilePath) !=3D MEDIA_DEVICE_PATH || - DevicePathSubType (*FilePath) !=3D MEDIA_FILEPATH_DP - ) { - FileHandle =3D NULL; - return (EFI_INVALID_PARAMETER); - } - // - // Open this file path node - // - Handle2 =3D Handle1; - Handle1 =3D NULL; - PathLength =3D DevicePathNodeLength (*FilePath) - sizeof (EFI_DEVICE_P= ATH_PROTOCOL); - PathName =3D AllocateCopyPool (PathLength, ((FILEPATH_DEVICE_PATH*)*Fi= lePath)->PathName); - if (PathName =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - // - // Try to test opening an existing file - // - Status =3D Handle2->Open ( - Handle2, - &Handle1, - PathName, - OpenMode &~EFI_FILE_MODE_CREATE, - 0 - ); - - // - // see if the error was that it needs to be created - // - if ((EFI_ERROR (Status)) && (OpenMode !=3D (OpenMode &~EFI_FILE_MODE_C= REATE))) { - Status =3D Handle2->Open ( - Handle2, - &Handle1, - PathName, - OpenMode, - Attributes - ); - } - // - // Close the last node - // - Handle2->Close (Handle2); - - FreePool (PathName); - - if (EFI_ERROR(Status)) { - return (Status); - } - - // - // Get the next node - // - *FilePath =3D NextDevicePathNode (*FilePath); - } - - // - // This is a weak spot since if the undefined SHELL_FILE_HANDLE format c= hanges this must change also! - // - *FileHandle =3D (VOID*)Handle1; - return EFI_SUCCESS; -} - - /** Extract filename from device path. The returned buffer is allocated usin= g AllocateCopyPool. The caller is responsible for freeing the allocated buffer using FreePoo= l(). If return NULL @@ -312,7 +163,7 @@ UpdatePage( =20 gSecureBootPrivateData->FileContext->FileName =3D FileName; =20 - OpenFileByDevicePath( + EfiOpenFileByDevicePath ( &FilePath, &gSecureBootPrivateData->FileContext->FHandle, EFI_FILE_MODE_READ, -- 2.14.1.3.gb7cf6e02401b