From nobody Wed May 8 11:51:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+102492+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102492+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1680622838; cv=none; d=zohomail.com; s=zohoarc; b=De7vF267Dv6oJ2rgdGazAabtjF758H5XoZrrkB3nfwG/Fo69V0oJ6QzpG8Q59tT3ZasR4zS+1GC0XZrimrxcYWw4Xktz6uBGbGoBaWzDHUsqYykOkbvrEC4hXJWx1IyCIU7sS2VutLNRh3tRBEb2EEKXcixJYvcwNcAWuDsjl+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680622838; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=6Go4jb/0+r6PdheCrR9RwY9ruGDaFVqgALv3YtnZ0wE=; b=Gt3C+bajT+3QRDv4dJVsrwinvbe/pT5/eN7K5lARGdYGCdMxnxK9ysB1Bp1ImpWcI6vfaDV1wo48cdNQILjf3md2pAhLyEwjtCOxX008M28hmRyur6iMrm3g108ljr00ouTOewHzY4QK+w9KipG0OuHenLuKuX4ENqXu2AgigIs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102492+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1680622838319447.0426515859866; Tue, 4 Apr 2023 08:40:38 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id FayRYY1788612x3NoCgzePL4; Tue, 04 Apr 2023 08:40:37 -0700 X-Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by mx.groups.io with SMTP id smtpd.web11.105355.1680622837370587779 for ; Tue, 04 Apr 2023 08:40:37 -0700 X-Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id B6A1A6361E; Tue, 4 Apr 2023 15:40:36 +0000 (UTC) X-Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F311C433D2; Tue, 4 Apr 2023 15:40:33 +0000 (UTC) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Michael Kinney , Liming Gao , Jiewen Yao , Michael Kubacki , Sean Brogan , Rebecca Cran , Leif Lindholm , Sami Mujawar , Taylor Beebe , =?UTF-8?q?Marvin=20H=C3=A4user?= , Bob Feng , Oliver Smith-Denny Subject: [edk2-devel] [PATCH v3 1/4] BaseTools/GenFw: Parse IBT/BTI support status from ELF note Date: Tue, 4 Apr 2023 17:40:19 +0200 Message-Id: <20230404154022.2776035-2-ardb@kernel.org> In-Reply-To: <20230404154022.2776035-1-ardb@kernel.org> References: <20230404154022.2776035-1-ardb@kernel.org> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ardb@kernel.org X-Gm-Message-State: Mq31R4ZHxWlStpqgjGTtKN9Mx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1680622837; bh=TXsVHOeqjg0znHfYEmVo2i6i+VzwIM4e46N1jS1tvaQ=; h=Cc:Date:From:Reply-To:Subject:To; b=FsiiflXNFISX2Mir0PkjN6UGzK/fCTo9be9u3tlOpI7VFcVQ0YOmw+2n/weBuNSJnce R98mLAGqBarBz2CdLW/XXd8rVvR3SyrTwNMjeSH+2JExCLtayfLg7wqnyTYH1HLssIcmJ pyvEOG/KaDFnspJOteS8A2b6h4hfNXSux2I= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1680622838691100005 Content-Type: text/plain; charset="utf-8" When performing ELF to PE/COFF conversion, parse any notes sections to decide whether the image supports forward CFI landing pads. This will be used to set the associated DllCharacteristicsEx flag in a subsequent patch. Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm Reviewed-by: Oliver Smith-Denny Acked-by: Michael Kubacki --- BaseTools/Source/C/GenFw/Elf64Convert.c | 50 ++++++++++++++++++++ BaseTools/Source/C/GenFw/elf_common.h | 9 ++++ 2 files changed, 59 insertions(+) diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/G= enFw/Elf64Convert.c index 8b50774beb1eebda..2a810e835d4a4a66 100644 --- a/BaseTools/Source/C/GenFw/Elf64Convert.c +++ b/BaseTools/Source/C/GenFw/Elf64Convert.c @@ -770,6 +770,49 @@ WriteSectionRiscV64 ( } } =20 +STATIC UINT16 mDllCharacteristicsEx; + +STATIC +VOID +ParseNoteSection ( + CONST Elf_Shdr *Shdr + ) +{ + CONST Elf_Note *Note; + CONST UINT32 *Prop; + UINT32 Prop0; + UINT32 Prop2; + + Note =3D (Elf_Note *)((UINT8 *)mEhdr + Shdr->sh_offset); + + if ((Note->n_type =3D=3D NT_GNU_PROPERTY_TYPE_0) && + (Note->n_namesz =3D=3D sizeof ("GNU")) && + (strcmp ((CHAR8 *)(Note + 1), "GNU") =3D=3D 0) && + (Note->n_descsz > sizeof (UINT32[2]))) { + Prop =3D (UINT32 *)((UINT8 *)(Note + 1) + sizeof("GNU")); + + switch (mEhdr->e_machine) { + case EM_AARCH64: + Prop0 =3D GNU_PROPERTY_AARCH64_FEATURE_1_AND; + Prop2 =3D GNU_PROPERTY_AARCH64_FEATURE_1_BTI; + break; + + case EM_X86_64: + Prop0 =3D GNU_PROPERTY_X86_FEATURE_1_AND; + Prop2 =3D GNU_PROPERTY_X86_FEATURE_1_IBT; + break; + + default: + return; + } + if ((Prop[0] =3D=3D Prop0) && + (Prop[1] >=3D sizeof (UINT32)) && + ((Prop[2] & Prop2) !=3D 0)) { + mDllCharacteristicsEx |=3D EFI_IMAGE_DLLCHARACTERISTICS_EX_FORWARD_C= FI_COMPAT; + } + } +} + // // Elf functions interface implementation // @@ -826,6 +869,13 @@ ScanSections64 ( } } =20 + for (i =3D 0; i < mEhdr->e_shnum; i++) { + Elf_Shdr *shdr =3D GetShdrByIndex(i); + if (shdr->sh_type =3D=3D SHT_NOTE) { + ParseNoteSection (shdr); + } + } + // // Check if mCoffAlignment is larger than MAX_COFF_ALIGNMENT // diff --git a/BaseTools/Source/C/GenFw/elf_common.h b/BaseTools/Source/C/Gen= Fw/elf_common.h index 7b7fdeb3290dfa88..ccd32804b090a226 100644 --- a/BaseTools/Source/C/GenFw/elf_common.h +++ b/BaseTools/Source/C/GenFw/elf_common.h @@ -59,6 +59,15 @@ typedef struct { UINT32 n_type; /* Type of this note. */ } Elf_Note; =20 +#define NT_GNU_PROPERTY_TYPE_0 5 + +#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 +#define GNU_PROPERTY_X86_FEATURE_1_IBT 0x1 + +#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 +#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI 0x1 +#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC 0x2 + /* Indexes into the e_ident array. Keep synced with http://www.sco.com/developers/gabi/latest/ch4.eheader.html */ #define EI_MAG0 0 /* Magic number, byte 0. */ --=20 2.39.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#102492): https://edk2.groups.io/g/devel/message/102492 Mute This Topic: https://groups.io/mt/98062731/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Wed May 8 11:51:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+102493+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102493+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1680622841; cv=none; d=zohomail.com; s=zohoarc; b=ZYn0valUduwacpPVoY98oI5R4l3oC0FZ//jJvwSxNSWnVITSQwRqf/yCQYrt0PyIGxvS/OYyzYUNosC36OyicDGtlUcCnyp4att7FIg5FQTm8FCLMnEM5lWu6sQu9do2V0LowCOhYe9mo6d/LS1E7WAB5+6PCULsZq1FF9aMO3Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680622841; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=u0M2MMwl2Ur2gkbUTeoo+eHajfsdHIVzVoUyZAQrHTw=; b=UDsOBX+FojJ39Aataiff69GC7zg5gANvuyuMhm6DPgypRrnhNuDuZs3rpJtCH1q8sby9u+03S4EhfbU1tLu4k0xl+L8bZqsatT/rQPpZgzcxy7YINaI+mBQE9PTbauuNBMLaYlXCzLQihd5qemtcmjfgvKuRAcKYNVKIRnd7hz8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102493+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1680622841189385.45779249716395; Tue, 4 Apr 2023 08:40:41 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id OGbGYY1788612xKjBRBafp72; Tue, 04 Apr 2023 08:40:40 -0700 X-Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by mx.groups.io with SMTP id smtpd.web11.105359.1680622840325722980 for ; Tue, 04 Apr 2023 08:40:40 -0700 X-Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id D8B42634F1; Tue, 4 Apr 2023 15:40:39 +0000 (UTC) X-Received: by smtp.kernel.org (Postfix) with ESMTPSA id 93C96C433EF; Tue, 4 Apr 2023 15:40:36 +0000 (UTC) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Michael Kinney , Liming Gao , Jiewen Yao , Michael Kubacki , Sean Brogan , Rebecca Cran , Leif Lindholm , Sami Mujawar , Taylor Beebe , =?UTF-8?q?Marvin=20H=C3=A4user?= , Bob Feng , Oliver Smith-Denny Subject: [edk2-devel] [PATCH v3 2/4] BaseTools/GenFw: Add DllCharacteristicsEx field to debug data Date: Tue, 4 Apr 2023 17:40:20 +0200 Message-Id: <20230404154022.2776035-3-ardb@kernel.org> In-Reply-To: <20230404154022.2776035-1-ardb@kernel.org> References: <20230404154022.2776035-1-ardb@kernel.org> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ardb@kernel.org X-Gm-Message-State: Mujb9yfq356Ew7cfMcJsdN9Kx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1680622840; bh=3Ii3ZIncURud0/3fvukCfG+ENxmnidZXnEmmivrnJtk=; h=Cc:Date:From:Reply-To:Subject:To; b=jyM6x9dzbkFaRq5yLxwiHOgTWuP6nXZVzEblatjTSDsilT36gj1jfaTR9DR8f1AcKsJ aDaySg2UOFDO9UemE+WcRx+bnPfhMJR+4VTxMHZiwEifS2q2T9IRJrhjVoShpRHz6y0v4 a17fN6eCkz7eIJTgCgXQ45lxqkabBoVkadc= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1680622841832100001 Content-Type: text/plain; charset="utf-8" The PE/COFF spec describes an additional DllCharacteristics field implemented as a debug directory entry, which carries flags related to which control flow integrity (CFI) features are supported by the binary. So let's add this entry when doing ELF to PE/COFF conversion - we will add support for setting the flags in a subsequent patch. Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm Reviewed-by: Oliver Smith-Denny Reviewed-by: Michael Kubacki --- BaseTools/Source/C/GenFw/Elf64Convert.c | 54 +++++++++++++++= ----- BaseTools/Source/C/GenFw/GenFw.c | 3 +- BaseTools/Source/C/Include/IndustryStandard/PeImage.h | 13 ++++- 3 files changed, 55 insertions(+), 15 deletions(-) diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/G= enFw/Elf64Convert.c index 2a810e835d4a4a66..9c17c90b16602421 100644 --- a/BaseTools/Source/C/GenFw/Elf64Convert.c +++ b/BaseTools/Source/C/GenFw/Elf64Convert.c @@ -992,6 +992,16 @@ ScanSections64 ( sizeof(EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY) + strlen(mInImageName) + 1; =20 + // + // Add more space in the .debug data region for the DllCharacteristicsEx + // field. + // + if (mDllCharacteristicsEx !=3D 0) { + mCoffOffset =3D DebugRvaAlign(mCoffOffset) + + sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY) + + sizeof (EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENTRY); + } + mCoffOffset =3D CoffAlign(mCoffOffset); if (SectionCount =3D=3D 0) { mDataOffset =3D mCoffOffset; @@ -2244,29 +2254,47 @@ WriteDebug64 ( VOID ) { - UINT32 Len; - EFI_IMAGE_OPTIONAL_HEADER_UNION *NtHdr; - EFI_IMAGE_DATA_DIRECTORY *DataDir; - EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *Dir; - EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY *Nb10; + UINT32 Len; + EFI_IMAGE_OPTIONAL_HEADER_UNION *NtHdr; + EFI_IMAGE_DATA_DIRECTORY *DataDir; + EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *Dir; + EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY *Nb10; + EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENTRY *DllEntry; =20 Len =3D strlen(mInImageName) + 1; =20 + NtHdr =3D (EFI_IMAGE_OPTIONAL_HEADER_UNION *)(mCoffFile + mNtHdrOffset); + DataDir =3D &NtHdr->Pe32Plus.OptionalHeader.DataDirectory[EFI_IMAGE_DIRE= CTORY_ENTRY_DEBUG]; + DataDir->VirtualAddress =3D mDebugOffset; + DataDir->Size =3D sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY); + Dir =3D (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY*)(mCoffFile + mDebugOffset); + + if (mDllCharacteristicsEx !=3D 0) { + DataDir->Size +=3D sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY); + + Dir->Type =3D EFI_IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS; + Dir->SizeOfData =3D sizeof (EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENTR= Y); + Dir->FileOffset =3D mDebugOffset + DataDir->Size + + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY) + + DebugRvaAlign(Len); + Dir->RVA =3D Dir->FileOffset; + + DllEntry =3D (VOID *)(mCoffFile + Dir->FileOffset); + + DllEntry->DllCharacteristicsEx =3D mDllCharacteristicsEx; + + Dir++; + } + Dir->Type =3D EFI_IMAGE_DEBUG_TYPE_CODEVIEW; Dir->SizeOfData =3D sizeof(EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY) + Len; - Dir->RVA =3D mDebugOffset + sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTRY); - Dir->FileOffset =3D mDebugOffset + sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTR= Y); + Dir->RVA =3D mDebugOffset + DataDir->Size; + Dir->FileOffset =3D mDebugOffset + DataDir->Size; =20 Nb10 =3D (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY*)(Dir + 1); Nb10->Signature =3D CODEVIEW_SIGNATURE_NB10; strcpy ((char *)(Nb10 + 1), mInImageName); - - - NtHdr =3D (EFI_IMAGE_OPTIONAL_HEADER_UNION *)(mCoffFile + mNtHdrOffset); - DataDir =3D &NtHdr->Pe32Plus.OptionalHeader.DataDirectory[EFI_IMAGE_DIRE= CTORY_ENTRY_DEBUG]; - DataDir->VirtualAddress =3D mDebugOffset; - DataDir->Size =3D sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTRY); } =20 STATIC diff --git a/BaseTools/Source/C/GenFw/GenFw.c b/BaseTools/Source/C/GenFw/Ge= nFw.c index 6f61f16788cd2a0a..d0e52ccc26431380 100644 --- a/BaseTools/Source/C/GenFw/GenFw.c +++ b/BaseTools/Source/C/GenFw/GenFw.c @@ -2932,7 +2932,8 @@ Routine Description: if (mIsConvertXip) { DebugEntry->FileOffset =3D DebugEntry->RVA; } - if (ZeroDebugFlag || DebugEntry->Type !=3D EFI_IMAGE_DEBUG_TYPE_CODE= VIEW) { + if ((ZeroDebugFlag || DebugEntry->Type !=3D EFI_IMAGE_DEBUG_TYPE_COD= EVIEW) && + (DebugEntry->Type !=3D EFI_IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTIC= S)) { memset (FileBuffer + DebugEntry->FileOffset, 0, DebugEntry->SizeOf= Data); memset (DebugEntry, 0, sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)); } diff --git a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h b/BaseTo= ols/Source/C/Include/IndustryStandard/PeImage.h index 77ded3f611398278..22161edf443d0e22 100644 --- a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h +++ b/BaseTools/Source/C/Include/IndustryStandard/PeImage.h @@ -615,7 +615,8 @@ typedef struct { /// /// Debug Format /// -#define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2 +#define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2 +#define EFI_IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS 20 =20 typedef struct { UINT32 Characteristics; @@ -664,6 +665,16 @@ typedef struct { // } EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY; =20 +/// +/// Extended DLL Characteristics +/// +#define EFI_IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT 0x0001 +#define EFI_IMAGE_DLLCHARACTERISTICS_EX_FORWARD_CFI_COMPAT 0x0040 + +typedef struct { + UINT32 DllCharacteristicsEx; +} EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENTRY; + // // .pdata entries for X64 // --=20 2.39.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#102493): https://edk2.groups.io/g/devel/message/102493 Mute This Topic: https://groups.io/mt/98062735/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Wed May 8 11:51:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+102494+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102494+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1680622849; cv=none; d=zohomail.com; s=zohoarc; b=AuoaQr5HK4xNq19lUcSHf4ZeFGSN6ePguLp6/ec5YZ0wvzSWSec8r1dXWwy8GDqiqFIZmRewEBMKFAjbU/FEbEy+Ug9Ud726SpZOZ+GT3k0CjiWpAEzW6GKAbCTIxBCqv7UTn+6SBWf2slnZtGjb5U0ArBWdNqSSfz1cwbZVies= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680622849; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=esc1iY7OlqTvJJ7bWAINgjiY5tKGp81hOh2iBvzYjfE=; b=iF+uVXfS1LcicZrHuhMYqzRQ1p4VsLxtstgTKPkZSD5JVGtZXjq8aBKYNJVdCmCnHir/CVLqWSyo01SjOLl8zPkLS37OBuQZh7f7goglb+rHm3xVHLmY8SdhU6MrUTURTqQTWVaxfIpfzSiFtI/UYLutvulsL8wnLaUZ+TH61ds= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102494+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1680622849232300.07589318787495; Tue, 4 Apr 2023 08:40:49 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id MA75YY1788612xUiUQpQeD66; Tue, 04 Apr 2023 08:40:44 -0700 X-Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by mx.groups.io with SMTP id smtpd.web11.105360.1680622843548907559 for ; Tue, 04 Apr 2023 08:40:43 -0700 X-Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0772F6361D; Tue, 4 Apr 2023 15:40:43 +0000 (UTC) X-Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8BFEC433D2; Tue, 4 Apr 2023 15:40:39 +0000 (UTC) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Michael Kinney , Liming Gao , Jiewen Yao , Michael Kubacki , Sean Brogan , Rebecca Cran , Leif Lindholm , Sami Mujawar , Taylor Beebe , =?UTF-8?q?Marvin=20H=C3=A4user?= , Bob Feng , Oliver Smith-Denny Subject: [edk2-devel] [PATCH v3 3/4] MdePkg/PeCoffLib: Capture DLL characteristics fields in image context Date: Tue, 4 Apr 2023 17:40:21 +0200 Message-Id: <20230404154022.2776035-4-ardb@kernel.org> In-Reply-To: <20230404154022.2776035-1-ardb@kernel.org> References: <20230404154022.2776035-1-ardb@kernel.org> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ardb@kernel.org X-Gm-Message-State: RwQXO7SNDXgECWVywaK3mfTCx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1680622844; bh=TieSuqXN8pnHxWNgWVfSS01RgGZsy9uXUyIwv3atEfc=; h=Cc:Date:From:Reply-To:Subject:To; b=mfwr831YG+8VJD5BrFZSlmZKP3XwkazprV5CTZVgb5V1EhpYx4SI0cwKbT53dnp0COR wbm4mjPlJkDmXAAlMMCdmwW2ZnhR59mgc22l6L3lvcZ4JS/J2kFiIUhJBEY5VPdlstVhf P56z4WRLm2YvPusmSR0yDJo9gS6N0tupHZc= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1680622851838100003 Content-Type: text/plain; charset="utf-8" When loading a PE/COFF image, capture the DLL characteristics fields of the header into our image context structure so we can refer to them when mapping the image. Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm Reviewed-by: Oliver Smith-Denny Reviewed-by: Michael Kubacki --- MdePkg/Include/IndustryStandard/PeImage.h | 13 +++++- MdePkg/Include/Library/PeCoffLib.h | 6 +++ MdePkg/Library/BasePeCoffLib/BasePeCoff.c | 46 +++++++++++++++----- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/MdePkg/Include/IndustryStandard/PeImage.h b/MdePkg/Include/Ind= ustryStandard/PeImage.h index dd4cc25483bc4bcf..8646ff22b55faff0 100644 --- a/MdePkg/Include/IndustryStandard/PeImage.h +++ b/MdePkg/Include/IndustryStandard/PeImage.h @@ -625,7 +625,8 @@ typedef struct { UINT32 FileOffset; ///< The file pointer to the debug data. } EFI_IMAGE_DEBUG_DIRECTORY_ENTRY; =20 -#define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2 ///< The Visual C++ debug info= rmation. +#define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2 ///< The Visual C= ++ debug information. +#define EFI_IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS 20 =20 /// /// Debug Data Structure defined in Microsoft C++. @@ -669,6 +670,16 @@ typedef struct { // } EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY; =20 +/// +/// Extended DLL Characteristics +/// +#define EFI_IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT 0x0001 +#define EFI_IMAGE_DLLCHARACTERISTICS_EX_FORWARD_CFI_COMPAT 0x0040 + +typedef struct { + UINT32 DllCharacteristicsEx; +} EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENTRY; + /// /// Resource format. /// diff --git a/MdePkg/Include/Library/PeCoffLib.h b/MdePkg/Include/Library/Pe= CoffLib.h index b45879453785c77d..74cceb37bf39ffc6 100644 --- a/MdePkg/Include/Library/PeCoffLib.h +++ b/MdePkg/Include/Library/PeCoffLib.h @@ -171,6 +171,12 @@ typedef struct { /// UINT16 ImageType; /// + /// Set by PeCoffLoaderGetImageInfo() to the DLL flags stored in the PE/= COFF header and + /// in the DllCharacteristicsEx debug table. + /// + UINT16 DllCharacteristics; + UINT32 DllCharacteristicsEx; + /// /// Set by PeCoffLoaderGetImageInfo() to TRUE if the PE/COFF image does = not contain /// relocation information. /// diff --git a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c b/MdePkg/Library/Bas= ePeCoffLib/BasePeCoff.c index 97a8aaf8c73d3e3c..4b71176a0c7c2ed0 100644 --- a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c +++ b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c @@ -308,10 +308,11 @@ PeCoffLoaderGetPeHeader ( // // Use PE32 offset // - ImageContext->ImageType =3D Hdr.Pe32->OptionalHeader.Subsyste= m; - ImageContext->ImageSize =3D (UINT64)Hdr.Pe32->OptionalHeader.= SizeOfImage; - ImageContext->SectionAlignment =3D Hdr.Pe32->OptionalHeader.SectionA= lignment; - ImageContext->SizeOfHeaders =3D Hdr.Pe32->OptionalHeader.SizeOfHe= aders; + ImageContext->ImageType =3D Hdr.Pe32->OptionalHeader.Subsys= tem; + ImageContext->ImageSize =3D (UINT64)Hdr.Pe32->OptionalHeade= r.SizeOfImage; + ImageContext->SectionAlignment =3D Hdr.Pe32->OptionalHeader.Sectio= nAlignment; + ImageContext->SizeOfHeaders =3D Hdr.Pe32->OptionalHeader.SizeOf= Headers; + ImageContext->DllCharacteristics =3D Hdr.Pe32->OptionalHeader.DllCha= racteristics; } else if (Hdr.Pe32->OptionalHeader.Magic =3D=3D EFI_IMAGE_NT_OPTIONAL= _HDR64_MAGIC) { // // 1. Check FileHeader.NumberOfRvaAndSizes filed. @@ -429,10 +430,11 @@ PeCoffLoaderGetPeHeader ( // // Use PE32+ offset // - ImageContext->ImageType =3D Hdr.Pe32Plus->OptionalHeader.Subs= ystem; - ImageContext->ImageSize =3D (UINT64)Hdr.Pe32Plus->OptionalHea= der.SizeOfImage; - ImageContext->SectionAlignment =3D Hdr.Pe32Plus->OptionalHeader.Sect= ionAlignment; - ImageContext->SizeOfHeaders =3D Hdr.Pe32Plus->OptionalHeader.Size= OfHeaders; + ImageContext->ImageType =3D Hdr.Pe32Plus->OptionalHeader.Su= bsystem; + ImageContext->ImageSize =3D (UINT64)Hdr.Pe32Plus->OptionalH= eader.SizeOfImage; + ImageContext->SectionAlignment =3D Hdr.Pe32Plus->OptionalHeader.Se= ctionAlignment; + ImageContext->SizeOfHeaders =3D Hdr.Pe32Plus->OptionalHeader.Si= zeOfHeaders; + ImageContext->DllCharacteristics =3D Hdr.Pe32Plus->OptionalHeader.Dl= lCharacteristics; } else { ImageContext->ImageError =3D IMAGE_ERROR_INVALID_MACHINE_TYPE; return RETURN_UNSUPPORTED; @@ -545,8 +547,9 @@ PeCoffLoaderGetPeHeader ( Retrieves information about a PE/COFF image. =20 Computes the PeCoffHeaderOffset, IsTeImage, ImageType, ImageAddress, Ima= geSize, - DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders= , and - DebugDirectoryEntryRva fields of the ImageContext structure. + DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders, + DllCharacteristics, DllCharacteristicsEx and DebugDirectoryEntryRva fiel= ds of + the ImageContext structure. If ImageContext is NULL, then return RETURN_INVALID_PARAMETER. If the PE/COFF image accessed through the ImageRead service in the Image= Context structure is not a supported PE/COFF image type, then return RETURN_UNSU= PPORTED. @@ -752,7 +755,28 @@ PeCoffLoaderGetImageInfo ( ImageContext->ImageSize +=3D DebugEntry.SizeOfData; } =20 - return RETURN_SUCCESS; + continue; + } + + if (DebugEntry.Type =3D=3D EFI_IMAGE_DEBUG_TYPE_EX_DLLCHARACTERI= STICS) { + Size =3D sizeof (EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENT= RY); + ReadSize =3D sizeof (EFI_IMAGE_DEBUG_EX_DLLCHARACTERISTICS_ENT= RY); + Status =3D ImageContext->ImageRead ( + ImageContext->Handle, + DebugEntry.FileOffset, + &Size, + &ImageContext->DllCharacteristicsEx + ); + if (RETURN_ERROR (Status) || (Size !=3D ReadSize)) { + ImageContext->ImageError =3D IMAGE_ERROR_IMAGE_READ; + if (Size !=3D ReadSize) { + Status =3D RETURN_UNSUPPORTED; + } + + return Status; + } + + continue; } } } --=20 2.39.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#102494): https://edk2.groups.io/g/devel/message/102494 Mute This Topic: https://groups.io/mt/98062739/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Wed May 8 11:51:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+102495+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102495+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1680622850; cv=none; d=zohomail.com; s=zohoarc; b=VIq3BuneIQYawwV5uVAs94PXuHUmg+rxPCAd2Bj1/XmDUugLGrl4FC0Kz5gs3m0OoEkx6/ACIk0MpcMHVdYxoSqtJhRyc8jfPCtgB+VufLPtRG9Voc8lbonf+RJ/BrZPllYiFUOqWk8/nj+mEWDauyIcDtnlQeGHcseZyxbYyR8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680622850; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=wf973z+fPFajVnrEPtG8/ygDrl8r14cLS7lZHWCsffA=; b=CeY7uKrsMZDsComYqoApdA2UGplaLtu3ZPwIixBgsxyMm5+5waMNJRrt4S9EVdCgMvZm+6lKnZwDkWWoJ5EipwZE1zpcBLttIUASg0puZOYypg1Gwn2VgN4KJAD3wNrFYtx/11yg88LCAx7ukFIllxkd5pSmi+8MK/fCJdJdbnk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+102495+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1680622850141984.7991079464267; Tue, 4 Apr 2023 08:40:50 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id r8CrYY1788612xpr3C0xJ6ok; Tue, 04 Apr 2023 08:40:49 -0700 X-Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by mx.groups.io with SMTP id smtpd.web11.105361.1680622846596069386 for ; Tue, 04 Apr 2023 08:40:46 -0700 X-Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 2BA7F634F5; Tue, 4 Apr 2023 15:40:46 +0000 (UTC) X-Received: by smtp.kernel.org (Postfix) with ESMTPSA id DCA0AC433A0; Tue, 4 Apr 2023 15:40:42 +0000 (UTC) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Michael Kinney , Liming Gao , Jiewen Yao , Michael Kubacki , Sean Brogan , Rebecca Cran , Leif Lindholm , Sami Mujawar , Taylor Beebe , =?UTF-8?q?Marvin=20H=C3=A4user?= , Bob Feng , Oliver Smith-Denny Subject: [edk2-devel] [PATCH v3 4/4] MdeModulePkg: Enable forward edge CFI in mem attributes table Date: Tue, 4 Apr 2023 17:40:22 +0200 Message-Id: <20230404154022.2776035-5-ardb@kernel.org> In-Reply-To: <20230404154022.2776035-1-ardb@kernel.org> References: <20230404154022.2776035-1-ardb@kernel.org> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ardb@kernel.org X-Gm-Message-State: G0ICa82LFZhobImYff7Vc3K3x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1680622849; bh=BGzUJRSwGPXxyG+EnMK3zoxTyA+lf/4YK0hINV3Ffu4=; h=Cc:Date:From:Reply-To:Subject:To; b=kTdgSwYrasTxHXRdu5rpbh8rjOI4dzqA+Kmv1k7E28oMp6S8BrSLKA4vXf9/J/g0uYz eCAHZAk8G5u3VgIwFWZ7K3EY1pYYHSigkjmumWk4HZBjDkU93sZVUJoBfEtn9f7rDm7up KJ2Iks0EkLi+FpmoUU4GzDgJKXkok91DV6A= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1680622850727100001 Content-Type: text/plain; charset="utf-8" The memory attributes table has been extended with a flag that indicates whether or not the OS is permitted to map the EFI runtime code regions with strict enforcement for IBT/BTI landing pad instructions. Given that the PE/COFF spec now defines a DllCharacteristicsEx flag that indicates whether or not a loaded image is compatible with this, we can wire this up to the flag in the memory attributes table, and set it if all loaded runtime image are compatible with it. Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm Reviewed-by: Oliver Smith-Denny Reviewed-by: Michael Kubacki --- MdeModulePkg/Core/Dxe/DxeMain.h | 2 ++ MdeModulePkg/Core/Dxe/Image/Image.c | 10 ++++++++++ MdeModulePkg/Core/Dxe/Misc/MemoryAttributesTable.c | 8 +++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMai= n.h index 815a6b4bd844a452..43daa037be441150 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.h +++ b/MdeModulePkg/Core/Dxe/DxeMain.h @@ -280,6 +280,8 @@ extern EFI_MEMORY_TYPE_INFORMATION gMemoryTypeInformat= ion[EfiMaxMemoryType + 1] extern BOOLEAN gDispatcherRunning; extern EFI_RUNTIME_ARCH_PROTOCOL gRuntimeTemplate; =20 +extern BOOLEAN gMemoryAttributesTableForwardCfi; + extern EFI_LOAD_FIXED_ADDRESS_CONFIGURATION_TABLE gLoadModuleAtFixAddress= ConfigurationTable; extern BOOLEAN gLoadFixedAddressCodeMe= moryReady; // diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c b/MdeModulePkg/Core/Dxe/Im= age/Image.c index 8704ebea9a7c88c0..9dbfb2a1fad22ced 100644 --- a/MdeModulePkg/Core/Dxe/Image/Image.c +++ b/MdeModulePkg/Core/Dxe/Image/Image.c @@ -1399,6 +1399,16 @@ CoreLoadImageCommon ( CoreNewDebugImageInfoEntry (EFI_DEBUG_IMAGE_INFO_TYPE_NORMAL, &Image->= Info, Image->Handle); } =20 + // + // Check whether we are loading a runtime image that lacks support for + // IBT/BTI landing pads. + // + if ((Image->ImageContext.ImageCodeMemoryType =3D=3D EfiRuntimeServicesCo= de) && + ((Image->ImageContext.DllCharacteristicsEx & EFI_IMAGE_DLLCHARACTERI= STICS_EX_FORWARD_CFI_COMPAT) =3D=3D 0)) + { + gMemoryAttributesTableForwardCfi =3D FALSE; + } + // // Reinstall loaded image protocol to fire any notifications // diff --git a/MdeModulePkg/Core/Dxe/Misc/MemoryAttributesTable.c b/MdeModule= Pkg/Core/Dxe/Misc/MemoryAttributesTable.c index 82fa026bceb990e5..fd127ee167e1ac9a 100644 --- a/MdeModulePkg/Core/Dxe/Misc/MemoryAttributesTable.c +++ b/MdeModulePkg/Core/Dxe/Misc/MemoryAttributesTable.c @@ -89,6 +89,7 @@ BOOLEAN mMemoryAttributesTableEnable= =3D TRUE; BOOLEAN mMemoryAttributesTableEndOfDxe =3D FALSE; EFI_MEMORY_ATTRIBUTES_TABLE *mMemoryAttributesTable =3D NULL; BOOLEAN mMemoryAttributesTableReadyToBoot =3D FALSE; +BOOLEAN gMemoryAttributesTableForwardCfi =3D TRUE; =20 /** Install MemoryAttributesTable. @@ -182,7 +183,12 @@ InstallMemoryAttributesTable ( MemoryAttributesTable->Version =3D EFI_MEMORY_ATTRIBUTES_TABLE_V= ERSION; MemoryAttributesTable->NumberOfEntries =3D RuntimeEntryCount; MemoryAttributesTable->DescriptorSize =3D (UINT32)DescriptorSize; - MemoryAttributesTable->Flags =3D 0; + if (gMemoryAttributesTableForwardCfi) { + MemoryAttributesTable->Flags =3D EFI_MEMORY_ATTRIBUTES_FLAGS_RT_FORWAR= D_CONTROL_FLOW_GUARD; + } else { + MemoryAttributesTable->Flags =3D 0; + } + DEBUG ((DEBUG_VERBOSE, "MemoryAttributesTable:\n")); DEBUG ((DEBUG_VERBOSE, " Version - 0x%08x\n", MemoryAttrib= utesTable->Version)); DEBUG ((DEBUG_VERBOSE, " NumberOfEntries - 0x%08x\n", MemoryAttrib= utesTable->NumberOfEntries)); --=20 2.39.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#102495): https://edk2.groups.io/g/devel/message/102495 Mute This Topic: https://groups.io/mt/98062740/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-