From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4864:20::144; helo=mail-it1-x144.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-it1-x144.google.com (mail-it1-x144.google.com [IPv6:2607:f8b0:4864:20::144]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 64CEE2119FF32 for ; Thu, 27 Dec 2018 02:16:58 -0800 (PST) Received: by mail-it1-x144.google.com with SMTP id h65so23142669ith.3 for ; Thu, 27 Dec 2018 02:16:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=w7NmDok9jIQV7S06W8GFGKWQp1ME11QUy4ImEitocTA=; b=Fi1c8bW9wsnzuISv7aqC3R+iQ6vLoPcpsDknEaft7CGJ45xq7GNlxBR6tuU1Gzdj6v vx+ETDvkn8oSee6n2sCQbZXOdmM+wF3thjslB3E6tTmOUtTmU8vqdcfC03xMUiJglL9a 0iirVb+eJ67naNC9LtaVpbyu1LsL+EdiLlARA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=w7NmDok9jIQV7S06W8GFGKWQp1ME11QUy4ImEitocTA=; b=hb5dS/5Vmzq95NiAoJaKUkwkKLGVxp/fQ4bZSNqTgmz5QKvmyqxMa9r1FMaX/VqwBx 0TkSVikICnZ4S6v6V28pA0Jf0AIMjpz0K2y+Pxc4+WSEjOyAi0a+Au4kLyZw9UQaBnIw v5jxNMUDr9wFcQNv1oJTTlBLcLh54MnM/0v7rXeq+1ExomLl005E8AD1EST5ap7kU6Nh HP0GD+H26D/Is9U2KkHAyiiQILX5RWkAzv+kcYTDbAC040jZQIMveLAX1Ijev9iCtBMg B6Pm4197f3whYrMXAUc35ntwmgMWE3hvsZR0IeLFNb44N3JalVBrwqkrcBsFuR6Msi5s GiJQ== X-Gm-Message-State: AA+aEWb4y1hRwJUgVGhH/wu6MGO4vAzUdIfx+ZikmegNvVhRvUdDl3L8 EACXpyUW0ZXywHToM9MGNpNlyrvHoYOolhowtj28+A== X-Google-Smtp-Source: AFSGD/U9AjzWGhB2fO687sxMEUMBCGaBaTpNeSHXUpdl9RxF1Usw49lmSDtkzcHKl6OjDr7HlDL5itB/7K1rrQrwzZU= X-Received: by 2002:a24:edc4:: with SMTP id r187mr16338619ith.158.1545905817379; Thu, 27 Dec 2018 02:16:57 -0800 (PST) MIME-Version: 1.0 References: <20180920230145.7565-1-ard.biesheuvel@linaro.org> <20180920230145.7565-5-ard.biesheuvel@linaro.org> In-Reply-To: From: Ard Biesheuvel Date: Thu, 27 Dec 2018 11:16:46 +0100 Message-ID: To: "Kinney, Michael D" Cc: "edk2-devel@lists.01.org" , "Ni, Ruiyu" , "Zimmer, Vincent" , "Dong, Eric" , Andrew Fish , "Carsey, Jaben" , "Richardson, Brian" , "Gao, Liming" , "Zeng, Star" 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: Thu, 27 Dec 2018 10:16:58 -0000 Content-Type: text/plain; charset="UTF-8" On Thu, 27 Sep 2018 at 01:34, Kinney, Michael D wrote: > > 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 > 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. > In this case, yes, I think we can drop the machine type check. > > -----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 > > > > 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. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Ard Biesheuvel > > > > --- > > MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c > > | 51 +++++++++++++++++++- > > MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > > | 1 + > > > > MdeModulePkg/Library/UefiBootManagerLib/UefiBootManager > > Lib.inf | 1 + > > 3 files changed, 52 insertions(+), 1 deletion(-) > > > > 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; > > } > > > > +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 = gBS->LocateHandleBuffer ( > > + ByProtocol, > > + > > &gEdkiiPeCoffImageEmulatorProtocolGuid, > > + NULL, > > + &HandleCount, > > + &HandleBuffer > > + ); > > + if (EFI_ERROR (Status)) { > > + return FALSE; > > + } > > + > > + ReturnValue = FALSE; > > + for (Index = 0; Index < HandleCount; Index++) { > > + Status = gBS->HandleProtocol ( > > + HandleBuffer[Index], > > + > > &gEdkiiPeCoffImageEmulatorProtocolGuid, > > + (VOID **)&Emu > > + ); > > + ASSERT_EFI_ERROR (Status); > > + > > + if (Emu->IsImageSupported (Emu, MachineType, > > SubSystem, NULL)) { > > + ReturnValue = TRUE; > > + break; > > + } > > + } > > + > > + FreePool (HandleBuffer); > > + return ReturnValue; > > +} > > + > > /** > > Return whether the PE header of the load option is > > valid or not. > > > > @@ -1235,7 +1283,8 @@ BmIsLoadOptionPeHeaderValid ( > > OptionalHeader = (EFI_IMAGE_OPTIONAL_HEADER32 *) > > &PeHeader->Pe32.OptionalHeader; > > if ((OptionalHeader->Magic == > > EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC || > > OptionalHeader->Magic == > > 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 > > > > #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 > > > > _______________________________________________ > > edk2-devel mailing list > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel