From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.88; helo=mga01.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 0209A2098C8D0 for ; Thu, 19 Jul 2018 03:36:44 -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 fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2018 03:36:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,374,1526367600"; d="scan'208";a="74066903" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga001.jf.intel.com with ESMTP; 19 Jul 2018 03:36:39 -0700 Received: from fmsmsx156.amr.corp.intel.com (10.18.116.74) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 19 Jul 2018 03:36:39 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx156.amr.corp.intel.com (10.18.116.74) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 19 Jul 2018 03:36:39 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.124]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.57]) with mapi id 14.03.0319.002; Thu, 19 Jul 2018 18:36:37 +0800 From: "Zeng, Star" To: Laszlo Ersek , edk2-devel-01 CC: "Dong, Eric" , "Wu, Jiaxin" , "Ni, Ruiyu" , "Fu, Siyuan" , "Zeng, Star" Thread-Topic: [PATCH 2/6] MdeModulePkg/RamDiskDxe: replace OpenFileByDevicePath() with UefiLib API Thread-Index: AQHUHtkIbkBs0tTsMEKxB960opyx7KSWWseQ Date: Thu, 19 Jul 2018 10:36:35 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BB84E78@shsmsx102.ccr.corp.intel.com> References: <20180718205043.17574-1-lersek@redhat.com> <20180718205043.17574-3-lersek@redhat.com> In-Reply-To: <20180718205043.17574-3-lersek@redhat.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 2/6] MdeModulePkg/RamDiskDxe: 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: Thu, 19 Jul 2018 10:36:45 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Laszlo, Have you evaluated whether " #include " can b= e removed from *.h file or not since gEfiSimpleFileSystemProtocolGuid is re= moved from *.inf? Thanks, Star -----Original Message----- From: Laszlo Ersek [mailto:lersek@redhat.com]=20 Sent: Thursday, July 19, 2018 4:51 AM To: edk2-devel-01 Cc: Dong, Eric ; Wu, Jiaxin ; Ni,= Ruiyu ; Fu, Siyuan ; Zeng, Star <= star.zeng@intel.com> Subject: [PATCH 2/6] MdeModulePkg/RamDiskDxe: replace OpenFileByDevicePath(= ) 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, - passing a potentially unaligned "FILEPATH_DEVICE_PATH.PathName" field to a protocol member function (forbidden by the UEFI spec), - leaking "Handle1" when the device path type/subtype check fails in the loop, - stale SHELL_FILE_HANDLE reference in a comment. Cc: Eric Dong Cc: Jiaxin Wu Cc: Ruiyu Ni Cc: Siyuan Fu Cc: Star Zeng Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1008 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek --- MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf | 1 - MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.h | 39 ------ MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskFileExplorer.c | 140 -------= ------------- MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.c | 2 +- 4 files changed, 1 insertion(+), 181 deletions(-) diff --git a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf b/MdeMod= ulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf index cdd2da690411..da00e4a420e7 100644 --- a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf +++ b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf @@ -75,7 +75,6 @@ [Protocols] gEfiDevicePathProtocolGuid ## PRODUCES gEfiBlockIoProtocolGuid ## PRODUCES gEfiBlockIo2ProtocolGuid ## PRODUCES - gEfiSimpleFileSystemProtocolGuid ## SOMETIMES_CONSUMES gEfiAcpiTableProtocolGuid ## SOMETIMES_CONSUMES gEfiAcpiSdtProtocolGuid ## SOMETIMES_CONSUMES =20 diff --git a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.h b/MdeModu= lePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.h index 077bb77b25bf..08a8ca94c9db 100644 --- a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.h +++ b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.h @@ -605,45 +605,6 @@ FileInfo ( ); =20 =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 val= ue. - @retval EFI_UNSUPPORTED Could not open the file path. - @retval EFI_NOT_FOUND The specified file could not be found on= the - device or the file system could not be f= ound - 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 corrupted= . - @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 o= pen - 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 - ); - - /** Publish the RAM disk NVDIMM Firmware Interface Table (NFIT) to the ACPI table. diff --git a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskFileExplorer.c b= /MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskFileExplorer.c index 2cfd4bbf6ce8..95d676fc3939 100644 --- a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskFileExplorer.c +++ b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskFileExplorer.c @@ -111,143 +111,3 @@ FileInfo ( =20 return Buffer; } - - -/** - 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 val= ue. - @retval EFI_UNSUPPORTED Could not open the file path. - @retval EFI_NOT_FOUND The specified file could not be found on= the - device or the file system could not be f= ound - 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 corrupted= . - @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 o= pen - 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; - - 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; - - // - // Try to test opening an existing file - // - Status =3D Handle2->Open ( - Handle2, - &Handle1, - ((FILEPATH_DEVICE_PATH*)*FilePath)->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, - ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName, - OpenMode, - Attributes - ); - } - // - // Close the last node - // - Handle2->Close (Handle2); - - 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; -} diff --git a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.c b/MdeModu= lePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.c index 7ebd397fe68a..62933a2d6201 100644 --- a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.c +++ b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.c @@ -656,7 +656,7 @@ RamDiskCallback ( // // Open the file. // - Status =3D OpenFileByDevicePath ( + Status =3D EfiOpenFileByDevicePath ( &FileDevPath, &FileHandle, EFI_FILE_MODE_READ, -- 2.14.1.3.gb7cf6e02401b