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=michael.d.kinney@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 D89F72114B12E for ; Wed, 26 Sep 2018 16:34:40 -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; 26 Sep 2018 16:34:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,308,1534834800"; d="scan'208";a="94033390" Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by orsmga001.jf.intel.com with ESMTP; 26 Sep 2018 16:34:39 -0700 Received: from orsmsx155.amr.corp.intel.com (10.22.240.21) by ORSMSX101.amr.corp.intel.com (10.22.225.128) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 26 Sep 2018 16:34:39 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.89]) by ORSMSX155.amr.corp.intel.com ([169.254.7.228]) with mapi id 14.03.0319.002; Wed, 26 Sep 2018 16:34:39 -0700 From: "Kinney, Michael D" To: Ard Biesheuvel , "edk2-devel@lists.01.org" , "Kinney, Michael D" CC: "Ni, Ruiyu" , "Zimmer, Vincent" , "Dong, Eric" , Andrew Fish , "Carsey, Jaben" , "Richardson, Brian" , "Gao, Liming" , "Zeng, Star" Thread-Topic: [edk2] [PATCH v3 4/7] MdeModulePkg/UefiBootManagerLib: allow foreign Driver#### images Thread-Index: AQHUUTYAvZAJMebXME+Ed7/3L0Ybd6UDP7CA Date: Wed, 26 Sep 2018 23:34:39 +0000 Message-ID: References: <20180920230145.7565-1-ard.biesheuvel@linaro.org> <20180920230145.7565-5-ard.biesheuvel@linaro.org> In-Reply-To: <20180920230145.7565-5-ard.biesheuvel@linaro.org> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Subject: Re: [PATCH v3 4/7] MdeModulePkg/UefiBootManagerLib: allow foreign Driver#### images X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Sep 2018 23:34:41 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Ard, Similar to my PciBusDxe feedback, it would be better if the image supported information was determined by calling LoadImage() and checking for an EFI_UNSUPPORTED return value. This also has the advantage of reducing the number of=20 components that need to be aware of any new protocols associated with emulation with the best case being the DXE Core and the modules that provide the emulators. Thanks, Mike > -----Original Message----- > From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of Ard Biesheuvel > Sent: Thursday, September 20, 2018 4:02 PM > To: edk2-devel@lists.01.org > Cc: Ni, Ruiyu ; Zimmer, Vincent > ; Dong, Eric > ; Andrew Fish ; > Carsey, Jaben ; Richardson, > Brian ; Gao, Liming > ; Kinney, Michael D > ; Zeng, Star > > Subject: [edk2] [PATCH v3 4/7] > MdeModulePkg/UefiBootManagerLib: allow foreign > Driver#### images >=20 > Allow PE/COFF images that must execute under emulation > for Driver#### > options, by relaxing the machine type check to include > support for > machine types that is provided by an emulator. >=20 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel > > --- > MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c > | 51 +++++++++++++++++++- > MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > | 1 + >=20 > MdeModulePkg/Library/UefiBootManagerLib/UefiBootManager > Lib.inf | 1 + > 3 files changed, 52 insertions(+), 1 deletion(-) >=20 > diff --git > a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > c > b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > c > index 7bf96646c690..f6fda8f2c3f7 100644 > --- > a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > c > +++ > b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > c > @@ -1185,6 +1185,54 @@ EfiBootManagerFreeLoadOptions ( > return EFI_SUCCESS; > } >=20 > +STATIC > +BOOLEAN > +BmIsImageTypeSupported ( > + IN UINT16 MachineType, > + IN UINT16 SubSystem > + ) > +{ > + EFI_STATUS Status; > + EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *Emu; > + UINTN HandleCount; > + EFI_HANDLE *HandleBuffer; > + BOOLEAN ReturnValue; > + UINTN Index; > + > + if (EFI_IMAGE_MACHINE_TYPE_SUPPORTED (MachineType)) > { > + return TRUE; > + } > + > + Status =3D gBS->LocateHandleBuffer ( > + ByProtocol, > + > &gEdkiiPeCoffImageEmulatorProtocolGuid, > + NULL, > + &HandleCount, > + &HandleBuffer > + ); > + if (EFI_ERROR (Status)) { > + return FALSE; > + } > + > + ReturnValue =3D FALSE; > + for (Index =3D 0; Index < HandleCount; Index++) { > + Status =3D gBS->HandleProtocol ( > + HandleBuffer[Index], > + > &gEdkiiPeCoffImageEmulatorProtocolGuid, > + (VOID **)&Emu > + ); > + ASSERT_EFI_ERROR (Status); > + > + if (Emu->IsImageSupported (Emu, MachineType, > SubSystem, NULL)) { > + ReturnValue =3D TRUE; > + break; > + } > + } > + > + FreePool (HandleBuffer); > + return ReturnValue; > +} > + > /** > Return whether the PE header of the load option is > valid or not. >=20 > @@ -1235,7 +1283,8 @@ BmIsLoadOptionPeHeaderValid ( > OptionalHeader =3D (EFI_IMAGE_OPTIONAL_HEADER32 *) > &PeHeader->Pe32.OptionalHeader; > if ((OptionalHeader->Magic =3D=3D > EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC || > OptionalHeader->Magic =3D=3D > EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) && > - EFI_IMAGE_MACHINE_TYPE_SUPPORTED (PeHeader- > >Pe32.FileHeader.Machine) > + BmIsImageTypeSupported (PeHeader- > >Pe32.FileHeader.Machine, > + OptionalHeader- > >Subsystem) > ) { > // > // Check the Subsystem: > diff --git > a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > index 978fbff966f6..5f64ef304b87 100644 > --- > a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > +++ > b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > @@ -47,6 +47,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS > OF ANY KIND, EITHER EXPRESS OR IMPLIED. > #include > #include > #include > +#include >=20 > #include > #include > diff --git > a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > erLib.inf > b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > erLib.inf > index 72c5ca1cd59e..09e2134acf8e 100644 > --- > a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > erLib.inf > +++ > b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > erLib.inf > @@ -104,6 +104,7 @@ > gEfiDevicePathProtocolGuid ## > SOMETIMES_CONSUMES > gEfiBootLogoProtocolGuid ## > SOMETIMES_CONSUMES > gEfiSimpleTextInputExProtocolGuid ## > SOMETIMES_CONSUMES > + gEdkiiPeCoffImageEmulatorProtocolGuid ## > SOMETIMES_CONSUMES > gEdkiiVariableLockProtocolGuid ## > SOMETIMES_CONSUMES > gEfiGraphicsOutputProtocolGuid ## > SOMETIMES_CONSUMES > gEfiUsbIoProtocolGuid ## > SOMETIMES_CONSUMES > -- > 2.17.1 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel