From nobody Sun Oct 5 19:01:43 2025 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+68728+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+68728+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1607717287; cv=none; d=zohomail.com; s=zohoarc; b=U9FhRs37vYMeL0swjpatEv82oAiXTMLHi8nLnKufBwn6bS0ZjI3hJTgp3catLbmBew3r5kBRhnT6p+bI3odniEtBYATphUNRcZ5S0+Qt2k8JkFnPY/L3UyP5o23TFwj/VRcIkdhS8h5Rje3KXNCI9vxV/AvFfbwj+Ruh0HgRaq0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607717287; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=hGcihJeyMYz3WlqHW1md7L6fcpnVrpIxekLjdx4I7is=; b=Nc17g0FQng91smUg5uLVdw0WFk8KFyNIW/KytAjv51hRPeild8WG2j3e+YsyWoZg+ohSHKPm4RLXCnmfdf88EbPE6eecKhO8Ump/lDscd5WgVuPKuKYUnZPL9PjsY3k1Bv8sCb8IHK739rhCgDwI6dg+uslBke2Zqn6ISnX1X6U= 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+68728+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 160771728682560.36222708171158; Fri, 11 Dec 2020 12:08:06 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id b6SiYY1788612xznxWcWuzND; Fri, 11 Dec 2020 12:08:03 -0800 X-Received: from mga17.intel.com (mga17.intel.com []) by mx.groups.io with SMTP id smtpd.web09.13038.1607717275324064921 for ; Fri, 11 Dec 2020 12:07:56 -0800 IronPort-SDR: UKLsB4A3xJKuHWsLykFZv6cOqbjI4J5eFMiChb47/47LFvxBo35v7iEiUFrUTott2K3v/AONsH ZhzkYHVMH4xw== X-IronPort-AV: E=McAfee;i="6000,8403,9832"; a="154302271" X-IronPort-AV: E=Sophos;i="5.78,412,1599548400"; d="scan'208";a="154302271" X-Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2020 12:07:55 -0800 IronPort-SDR: PN3se9810dL7k9E7aVraVXgMJ/ENsVwqa8GfjFQU1f/XTqi+P9HiPhexejoVf8McNhRNPRrY4j KTtmrFXlK7Ow== X-IronPort-AV: E=Sophos;i="5.78,412,1599548400"; d="scan'208";a="365601928" X-Received: from mdkinney-mobl2.amr.corp.intel.com ([10.212.203.56]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2020 12:07:54 -0800 From: "Michael D Kinney" To: devel@edk2.groups.io Cc: Jiewen Yao , Vincent Zimmer , Laurie Jarlstrom , Kevin Shaw Subject: [edk2-devel] [tianocore-docs][ATBB-Memory_Protection_in_UEFI_BIOS][Patch 1/2] Clean up format and layout to match template Date: Fri, 11 Dec 2020 12:07:47 -0800 Message-Id: <20201211200748.1622-2-michael.d.kinney@intel.com> In-Reply-To: <20201211200748.1622-1-michael.d.kinney@intel.com> References: <20201211200748.1622-1-michael.d.kinney@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: 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,michael.d.kinney@intel.com X-Gm-Message-State: NrIzSGEXbDE7RIKpttfKTCT8x1787277AA= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1607717283; bh=NZFkkBz1T7mq1oYRaCxaLxoPlCvwhIwm4sh/4VYpgqg=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=whNIBDSOiQvdILbnSulTaqK+NMJEg/gkHmeuVtOKAikAHsmppJVBOpkNdjJbn6YqiVg jDVlJ+0mHS/URSVsjqs1jFv9wrwsPEOZHbgOCN7jAA40v9SYEbFWUclv1S4MgxMZQArLp vuh6oOntZy8E49QbsN0vzg0AnVq4KOLzqDg= X-ZohoMail-DKIM: pass (identity @groups.io) * Move figures from assets directory to media directory * Remove non ASCII characters * Add Figure to TOC * Add missing file headers Cc: Jiewen Yao Cc: Vincent Zimmer Cc: Laurie Jarlstrom Cc: Kevin Shaw Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney Reviewed-by: Jiewen Yao --- README.md | 36 ++--- SUMMARY.md | 38 +++++ assets/Tianocore_logo2.png | Bin 7360 -> 0 bytes authors.md | 31 ++++ book.json | 9 ++ cover.jpg | Bin 0 -> 211343 bytes executive-summary.md | 31 ++++ glossary.md | 68 ++++++--- .../Fig1- SMRAM memory protection.jpg | Bin .../Fig2 - Mapping of Protection in SMM.jpg | Bin ...g3 - Page table enforced memory layout.jpg | Bin .../Fig4 - UEFI memory protection.jpg | Bin media/TianocoreTitlePageLogo.jpg | Bin 0 -> 44499 bytes memory-protection-in-SMM.md | 134 ++++++++++-------- memory-protection-in-uefi.md | 104 +++++++++----- references.md | 50 +++++-- 16 files changed, 359 insertions(+), 142 deletions(-) delete mode 100644 assets/Tianocore_logo2.png create mode 100644 book.json create mode 100644 cover.jpg rename {assets =3D> media}/Fig1- SMRAM memory protection.jpg (100%) rename {assets =3D> media}/Fig2 - Mapping of Protection in SMM.jpg (100%) rename {assets =3D> media}/Fig3 - Page table enforced memory layout.jpg (1= 00%) rename {assets =3D> media}/Fig4 - UEFI memory protection.jpg (100%) create mode 100644 media/TianocoreTitlePageLogo.jpg diff --git a/README.md b/README.md index 6bc2a7b..f470c6e 100644 --- a/README.md +++ b/README.md @@ -29,30 +29,29 @@ =20 --> =20 -![](/assets/Tianocore_logo2.png) + =20 -#####White Paper +### {{ book.title }} =20 +{% if book.draft %} +** DRAFT FOR REVIEW ** +{% else %} +** {{ book.version }} ** +{% endif %} =20 -# A Tour Beyond BIOS - Memory Protection in UEFI BIOS +** {{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }} ** =20 +{% if book.udkrelease %} +** {{ book.udkrelease }} ** +{% endif %} =20 - - _Jiewen Yao_,=20 + _Jiewen Yao_, _Intel Corporation_ =20 - - - - - _Vincent J. Zimmer _,=20 + _Vincent J. Zimmer _, _Intel Corporation_ =20 - - -##### March 2017 - -## Acknowledgements +### Acknowledgements =20 Redistribution and use in source (original document form) and 'compiled' forms (converted to PDF, epub, HTML and other formats) with or without @@ -78,7 +77,12 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDIN= G NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =20 -Copyright © 2007-2017, Intel Corporation. All rights reserved. +Copyright (c) 2007-2017, Intel Corporation. All rights reserved. + +### Revision History =20 +| Revision | Revision History | Date | +| ---------- | ------------------ | ----------- | +| 1.0 | Initial release. | March 2017 | =20 =20 diff --git a/SUMMARY.md b/SUMMARY.md index dcce47b..b0250f0 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,3 +1,34 @@ + + # Summary =20 * [Introduction](README.md) @@ -8,3 +39,10 @@ * [References](references.md) * [Authors](authors.md) =20 +--- + +* Figures + * [Figure 1 - SMRAM memory protection](memory-protection-in-SMM.md#figur= e-1---smram-memory-protection) + * [Figure 2 - Mapping of Protection in SMM](memory-protection-in-SMM.md#= figure-2---mapping-of-protection-in-smm) + * [Figure 3 - Page table enforced memory layout](memory-protection-in-SM= M.md#figure-3---page-table-enforced-memory-layout) + * [Figure 4 - UEFI memory protection](memory-protection-in-uefi.md#figur= e-4---uefi-memory-protection) diff --git a/assets/Tianocore_logo2.png b/assets/Tianocore_logo2.png deleted file mode 100644 index 0ba21dc7a651ee64ee3449415aabb667022276b8..000000000000000000000000000= 0000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7360 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 diff --git a/authors.md b/authors.md index f120a97..b3987ff 100644 --- a/authors.md +++ b/authors.md @@ -1,3 +1,34 @@ + + ## Authors Jiewen Yao [jiewen.yao@intel.com](mailto:jiewen.yao@intel.com) is EDK II= BIOS architect, EDK II FSP package maintainer, EDK II TPM2 module maintain= er, EDK II ACPI S3 module maintainer, with Software and Services Group at I= ntel Corporation. Jiewen is member of UEFI Security Sub-team and PI Securit= y Sub-team in the UEFI Forum. =20 diff --git a/book.json b/book.json new file mode 100644 index 0000000..b553eb5 --- /dev/null +++ b/book.json @@ -0,0 +1,9 @@ +{ + "variables" : { + "draft" : "yes", + "title" : "A Tour Beyond BIOS - Memory Protection in UEFI BIOS", + "version" : "Revision 1.0" + }, + "plugins": ["puml-aleung"], + "pluginsConfig": {} +} diff --git a/cover.jpg b/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24cb5a036ec8107ea3a7e37df38= b045baca492de GIT binary patch literal 211343 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 mUX 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 G=3D=3Dm>^QGss& literal 0 HcmV?d00001 diff --git a/executive-summary.md b/executive-summary.md index da95613..19c0569 100644 --- a/executive-summary.md +++ b/executive-summary.md @@ -1,3 +1,34 @@ + + # Executive Summary ## Introduction **Data execution protection (DEP)** is intended to prevent an application = or service from executing code from a non-executable memory region. This he= lps prevent certain exploits that store code via a buffer overflow. [[Windo= wsHeap][1]] shows 4 of 7 exploitation techniques that can be mitigated by D= EP and ASLR (Address Space Layout Randomization). [[DEP][2]] also shows 14 = of 19 exploits from popular exploit kits that fail with DEP enabled. Beside= s Windows, the Unix/Linux community also has similar non-executable protect= ion [[PaX][3]]. diff --git a/glossary.md b/glossary.md index f1eb67c..81a3bbb 100644 --- a/glossary.md +++ b/glossary.md @@ -1,51 +1,81 @@ + + # Glossary =20 -ASLR =E2=80=93 Address Space Layout Randomization. +ASLR - Address Space Layout Randomization. =20 BDA - BIOS Data Area. =20 -CSM =E2=80=93 Compatibility Support Module. +CSM - Compatibility Support Module. =20 -DEP =E2=80=93 Data Execution Protection.=20 +DEP - Data Execution Protection. =20 EBDA - Extended BIOS Data Area =20 -HOB =E2=80=93 Hand off block. See [[PI][1]]. +HOB - Hand off block. See [[PI][1]]. =20 -MMIO =E2=80=93 Memory Mapped I/O. +MMIO - Memory Mapped I/O. =20 -NX =E2=80=93 No Execution. See DEP. +NX - No Execution. See DEP. =20 -PE/COFF =E2=80=93 Portable Executable and Common Object File Format. The e= xecutable file format for UEFI. +PE/COFF - Portable Executable and Common Object File Format. The executabl= e file format for UEFI. =20 ROP - Return-oriented programming =20 -RO =E2=80=93 Read Only. +RO - Read Only. =20 -RW =E2=80=93 Read/Write. +RW - Read/Write. =20 -PCD =E2=80=93 Platform configuration database. See [[PI][1]]. +PCD - Platform configuration database. See [[PI][1]]. =20 -PF =E2=80=93 Page Fault Exception. +PF - Page Fault Exception. =20 -PI =E2=80=93 Platform Initialization. Volume 1-5 of the UEFI PI specificat= ions. +PI - Platform Initialization. Volume 1-5 of the UEFI PI specifications. =20 -SPI =E2=80=93 Serial Peripheral Interface. +SPI - Serial Peripheral Interface. =20 TSS - Task-state segment. See [[IA32 SDM][2]]. =20 -UEFI =E2=80=93 Unified Extensible Firmware Interface. Firmware interface= between the platform and the operating system. Predominate interfaces are= in the boot services (BS) or pre-OS. Few runtime (RT) services. =20 +UEFI - Unified Extensible Firmware Interface. Firmware interface between= the platform and the operating system. Predominate interfaces are in the = boot services (BS) or pre-OS. Few runtime (RT) services. =20 -VTd =E2=80=93 Virtualization for Directed IO. See [[VTd][3]] +VTd - Virtualization for Directed IO. See [[VTd][3]] =20 -WP =E2=80=93 Write Protect. +WP - Write Protect. =20 -XD =E2=80=93 Execution Disable. See DEP. +XD - Execution Disable. See DEP. =20 -XP =E2=80=93 Execution Protected. See DEP. +XP - Execution Protected. See DEP. =20 [1]: http://uefi.org "PI" - [2]: https://software.intel.com/en-us/articles/intel-sdm "IA32SDM" [3]: http://www.intel.com/content/www/us/en/embedded/technology/virtualiza= tion/vt-directed-io-spec.html "Vtd" =20 diff --git a/assets/Fig1- SMRAM memory protection.jpg b/media/Fig1- SMRAM m= emory protection.jpg similarity index 100% rename from assets/Fig1- SMRAM memory protection.jpg rename to media/Fig1- SMRAM memory protection.jpg diff --git a/assets/Fig2 - Mapping of Protection in SMM.jpg b/media/Fig2 - = Mapping of Protection in SMM.jpg similarity index 100% rename from assets/Fig2 - Mapping of Protection in SMM.jpg rename to media/Fig2 - Mapping of Protection in SMM.jpg diff --git a/assets/Fig3 - Page table enforced memory layout.jpg b/media/Fi= g3 - Page table enforced memory layout.jpg similarity index 100% rename from assets/Fig3 - Page table enforced memory layout.jpg rename to media/Fig3 - Page table enforced memory layout.jpg diff --git a/assets/Fig4 - UEFI memory protection.jpg b/media/Fig4 - UEFI m= emory protection.jpg similarity index 100% rename from assets/Fig4 - UEFI memory protection.jpg rename to media/Fig4 - UEFI memory protection.jpg diff --git a/media/TianocoreTitlePageLogo.jpg b/media/TianocoreTitlePageLog= o.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d84f1b7eb4a947cba4a05bc687f= bac3af7d5ed39 GIT binary patch literal 44499 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 literal 0 HcmV?d00001 diff --git a/memory-protection-in-SMM.md b/memory-protection-in-SMM.md index ce89639..e9f21bb 100644 --- a/memory-protection-in-SMM.md +++ b/memory-protection-in-SMM.md @@ -1,13 +1,44 @@ + + # Memory Protection in SMM =20 -The SMM is an isolated execution environment according to Intel=C2=AE 64 a= nd IA-32 Architectures Software Developer=E2=80=99s Manual [[IA32SDM][1]]. = The UEFI Platform Initialization [[PI][2]] specification volume 4 defines t= he SMM infrastructure. Figure 1 shows the SMM memory protection. **RO** des= ignates read-only memory. **XD **designates execution-disabled memory. +The SMM is an isolated execution environment according to Intel(R) 64 and = IA-32 Architectures Software Developer's Manual [[IA32SDM][1]]. The UEFI Pl= atform Initialization [[PI][2]] specification volume 4 defines the SMM infr= astructure. Figure 1 shows the SMM memory protection. **RO** designates rea= d-only memory. **XD **designates execution-disabled memory. =20 -![](/assets/Fig1- SMRAM memory protection.jpg) -=20 -Figure 1 - SMRAM memory protection +![](/media/Fig1- SMRAM memory protection.jpg) + +###### Figure 1 - SMRAM memory protection =20 ## Protection for PE image -In UEFI/PI firmware, the SMM image is a normal PE/COFF image loaded by the= SmmCore. If a given section of the SMM image is page aligned, it may be pr= otected according to the section attributes, such as read-only for the code= and non-executable for data. See the top right of figure 1. +In UEFI/PI firmware, the SMM image is a normal PE/COFF image loaded by the= SmmCore. If a given section of the SMM image is page aligned, it may be pr= otected according to the section attributes, such as read-only for the code= and non-executable for data. See the top right of Figure 1. =20 In EDK II, the PiSmmCore (https://github.com/tianocore/edk2/blob/master/Md= eModulePkg/Core/PiSmmCore/MemoryAttributesTable.c) checks the PE image alig= nment and builds an `EDKII_PI_SMM_MEMORY_ATTRIBUTES_TABLE ` (https://github= .com/tianocore/edk2/blob/master/MdeModulePkg/Include/Guid/PiSmmMemoryAttrib= utesTable.h) to record such information. If the PI SMM image is not page al= igned, this table will not be published. If the `EDKII_PI_SMM_MEMORY_ATTRIB= UTES_TABLE` is published, that means the `EfiRuntimeServicesCode` contains = only code and it is ``EFI_MEMORY_RO``, and the `EfiRuntimeServicesData` con= tains only data and it is `EFI_MEMORY_XP`. =20 @@ -15,8 +46,8 @@ Later the PiSmmCpu driver (https://github.com/tianocore/e= dk2/blob/master/UefiCpu =20 There are several assumptions to support the PE image protection in SMM: =20 -1. The PE code section and data sections are not merged. If those 2 sectio= ns are merged, a #PF exception might be generated because the CPU might try= to write a RO data item in the data section or execute a non-executable (N= X) instruction in code section. -2. The PE image can be protected if it is page aligned. There should not b= e any self-modified-code in the code region. If there is, a platform should= not set this PE image to be page aligned. +1. The PE code section and data sections are not merged. If those 2 sectio= ns are merged, a #PF exception might be generated because the CPU might try= to write a RO data item in the data section or execute a non-executable (N= X) instruction in code section. +2. The PE image can be protected if it is page aligned. There should not b= e any self-modified-code in the code region. If there is, a platform should= not set this PE image to be page aligned. =20 A platform may disable the XD in the UEFI environment, but this does not i= mpact the SMM environment. The SMM environment may choose to always enable = the XD upon SMM entry, and restore the XD state at the SMM exit point. =20 @@ -40,31 +71,31 @@ The IDT defines the entry point of the exception handle= r. If the IDT is updated, =20 This work is done by `PatchGdtIdtMap()` at https://github.com/tianocore/ed= k2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c. =20 -However, the IA32 version GDT cannot be set to read-only if the stack guar= d feature is enabled. (https://github.com/tianocore/edk2/blob/master/UefiCp= uPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c) The reason is that the IA32 stack = guard needs to use a "_task switch_" to switch the stack, and the task swit= ch needs to write the GDT and Task-State Segment (TSS). The X64 version of = the GDT does not have such a problem because the X64 stack guard uses =E2= =80=9C_interrupt stack table (IST)_=E2=80=9D to switch the stack. For detai= ls of the stack switch and exceptions, please refer to [[IA32SDM][1]]. +However, the IA32 version GDT cannot be set to read-only if the stack guar= d feature is enabled. (https://github.com/tianocore/edk2/blob/master/UefiCp= uPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c) The reason is that the IA32 stack = guard needs to use a "_task switch_" to switch the stack, and the task swit= ch needs to write the GDT and Task-State Segment (TSS). The X64 version of = the GDT does not have such a problem because the X64 stack guard uses "_int= errupt stack table (IST)_" to switch the stack. For details of the stack sw= itch and exceptions, please refer to [[IA32SDM][1]]. =20 ### Page Table In an X86 CPU, we rely on the page table to set up the read-only or non-ex= ecutable region. In order to prevent the page table itself from being updat= ed, we may need to set the page table itself to be read-only. =20 The work is done at https://github.com/tianocore/edk2/blob/master/UefiCpuP= kg/PiSmmCpuDxeSmm/X64/PageTbl.c `SetPageTableAttributes()`. =20 -However, setting a page table to be read-only may break the original dynam= ic paging feature in SMM. There is a (PCD) ```PcdCpuSmmStaticPageTable ``` = to determine if the platform wants to enable the static page table or the d= ynamic page table. +However, setting a page table to be read-only may break the original dynam= ic paging feature in SMM. There is a (PCD) `PcdCpuSmmStaticPageTable` to de= termine if the platform wants to enable the static page table or the dynami= c page table. =20 -If ```PcdCpuSmmStaticPageTable``` is FALSE, the PiSmmCpu uses the original= dynamic paging policy, namely the the PiSmmCpu only sets 4GiB paging by de= fault. If the PiSmmCpu needs to access above 4GiB memory locations, a page = fault exception (#PF) exception is triggered and an above-4GiB mapping is c= reated in the page fault handler. +If `PcdCpuSmmStaticPageTable` is FALSE, the PiSmmCpu uses the original dyn= amic paging policy, namely the the PiSmmCpu only sets 4GiB paging by defaul= t. If the PiSmmCpu needs to access above 4GiB memory locations, a page faul= t exception (#PF) exception is triggered and an above-4GiB mapping is creat= ed in the page fault handler. =20 -If ```PcdCpuSmmStaticPageTable``` is TRUE, the PiSmmCpu will try to set th= e read-only attribute for the page table. +If `PcdCpuSmmStaticPageTable` is TRUE, the PiSmmCpu will try to set the re= ad-only attribute for the page table. =20 Figure 2 shows the mapping of the protection. =20 -![](/assets/Fig2 - Mapping of Protection in SMM.jpg)=20 +![](/media/Fig2 - Mapping of Protection in SMM.jpg) =20 -Figure 2 Mapping of Protection in SMM +###### Figure 2 - Mapping of Protection in SMM =20 ## Life cycle of the protection -In a normal boot, the page table based protection is configured by the PiS= mmCpu driver just after the SmmReadyToLock event by ```PerformRemainingTask= s()``` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpu= DxeSmm/PiSmmCpuDxeSmm.c. All read-only data must be ready before ```SmmRead= yToLock```. +In a normal boot, the page table based protection is configured by the PiS= mmCpu driver just after the SmmReadyToLock event by `PerformRemainingTasks(= )` at https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeS= mm/PiSmmCpuDxeSmm.c. All read-only data must be ready before `SmmReadyToLoc= k`. =20 -In an S3 resume, the protection is disabled during SMBASE relocation becau= se the PiSmmCpu needs to set up the environment. The PiSmmCpu uses SmmS3Cr3= , which is generated by ```InitSmmS3Cr3()``` at https://github.com/tianocor= e/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c with 4G = paging only. After the SMBASE relocation is done, all the protection takes = effect up receipt of the next SMI by ```PerformPreTasks()``` at https://git= hub.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm= .c. +In an S3 resume, the protection is disabled during SMBASE relocation becau= se the PiSmmCpu needs to set up the environment. The PiSmmCpu uses SmmS3Cr3= , which is generated by `InitSmmS3Cr3()` at https://github.com/tianocore/ed= k2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c with 4G pagi= ng only. After the SMBASE relocation is done, all the protection takes effe= ct up receipt of the next SMI by `PerformPreTasks()` at https://github.com/= tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c. =20 -If there is an additional lock that needs to be set, it can be done in ```= SmmCpuFeaturesCompleteSmmReadyToLock()``` API (defined in https://github.co= m/tianocore/edk2/blob/master/UefiCpuPkg/Include/Library/SmmCpuFeaturesLib.h= ). +If there is an additional lock that needs to be set, it can be done in `Sm= mCpuFeaturesCompleteSmmReadyToLock()` API (defined in https://github.com/ti= anocore/edk2/blob/master/UefiCpuPkg/Include/Library/SmmCpuFeaturesLib.h). =20 ## SMRAM Size Overhead ### PE image @@ -80,29 +111,29 @@ In order to protect the page table itself, we must use= the static page table ins The size of the dynamic paging is fixed. We need 6 fixed pages (24K) and 8= on-demand pages (32K). The total size of the page table is 56K in this cas= e. =20 The size of the static page table depends upon 2 things: 1) 1G paging capa= bility, 2) max supported address bit. A rough estimation is below: -1. If 1G paging is supported, -* 32 bit addressing need (1+1+4) pages =3D 24K. (still use 2M paging for b= elow 4G memory) -* 39 bit addressing need (1+1+4) pages =3D 24K. -* 48 bit addressing need (1+512) pages =3D 2M. +1. If 1G paging is supported, +* 32 bit addressing need (1+1+4) pages =3D 24K. (still use 2M paging for b= elow 4G memory) +* 39 bit addressing need (1+1+4) pages =3D 24K. +* 48 bit addressing need (1+512) pages =3D 2M. * If 1G paging is not supported, 2M paging is used. -* 32 bit addressing need (1+1+4) pages =3D 24K. -* 39 bit addressing need (1+1+512) pages =3D 2M. -* 48 bit addressing need (1+512+512*512) pages =3D 1G. < - This seems ****= not**** acceptable. +* 32 bit addressing need (1+1+4) pages =3D 24K. +* 39 bit addressing need (1+1+512) pages =3D 2M. +* 48 bit addressing need (1+512+512*512) pages =3D 1G. < - This seems ****= not**** acceptable. =20 =20 -The maximum address bit is determined by the (CPU_HOB) if it is present, o= r the physical address bit returned by the CPUID instruction if the CPU_HOB= is not present. (https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/= PiSmmCpuDxeSmm/X64/PageTbl.c, ```CalculateMaximumSupportAddress()```) A pla= tform may set the CPU_HOB based upon the addressing capability of the memor= y controller or the CPU. +The maximum address bit is determined by the (CPU_HOB) if it is present, o= r the physical address bit returned by the CPUID instruction if the CPU_HOB= is not present. (https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/= PiSmmCpuDxeSmm/X64/PageTbl.c, `CalculateMaximumSupportAddress()`) A platfor= m may set the CPU_HOB based upon the addressing capability of the memory co= ntroller or the CPU. =20 ## Performance Overhead -1. The SMRAM protection setup is a one-time activity. It happens just afte= r the SmmReadyToLock event. We do not observe too much impact to the system= firmware boot performance. The activity only takes some small number of mi= lliseconds. +1. The SMRAM protection setup is a one-time activity. It happens just afte= r the SmmReadyToLock event. We do not observe too much impact to the system= firmware boot performance. The activity only takes some small number of mi= lliseconds. =20 -2. The SMRAM runtime protection is based upon the page table. No additiona= l CPU instruction is needed. As such, there is zero SMM runtime performance= impact to have this protection. +2. The SMRAM runtime protection is based upon the page table. No additiona= l CPU instruction is needed. As such, there is zero SMM runtime performance= impact to have this protection. =20 ## Non SMRAM access in SMM Besides the SMRAM, the SMM memory protection also limits the access to the= non-SMRAM region. =20 First, the non-SMRAM region must be set to be non-executable because the S= MM entities should not call any code outside SMRAM. Code outside of SMRAM m= ight be controlled by malicious software. =20 -This protection work is done by ```InitPaging()``` at https://github.com/t= ianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c +This protection work is done by `InitPaging()` at https://github.com/tiano= core/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c =20 =20 Second, because of the security concerns regarding SMM entities accessing = VMM memory, [[WindowsWSMT][3]] [[Wsmt.docx][4]] and [[MicrosoftHV][5]] intr= oduced the Windows SMM Security Mitigations Table (WSMT). A platform needs = to report the WSMT table in order to declare that the SMI handler will vali= date the SMM communication buffer. @@ -113,13 +144,13 @@ A better way is to use an active check. The PiSmmCpu = driver sets the non-fixed D =20 As such, if a platform SMI handler does not include the check recommended = in [[SecureSmmComm][6]], the system will get #PF exception within SMM on su= ch an attack. =20 -This protection work is done by ```SetUefiMemMapAttributes()``` at https:/= /github.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemo= ryManagement.c. +This protection work is done by `SetUefiMemMapAttributes()` at https://git= hub.com/tianocore/edk2/blob/master/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryMa= nagement.c. =20 Figure 3 shows final image layout. =20 - ![](/assets/Fig3 - Page table enforced memory layout.jpg) + ![](/media/Fig3 - Page table enforced memory layout.jpg) =20 -Figure 3 Page table enforced memory layout +###### Figure 3 - Page table enforced memory layout =20 The assumption for non-SMRAM access in SMM is described in [[SecureSmmComm= ][6]]. Besides that, this solution assumes that all DRAM regions are added to the= Global Coherency Domain (GCD) management before EndOfDxe, so that the UEFI= memory map can return all DRAM regions. If there are more regions added to= the GCD after EndOfDxe, those regions are not set to not-present in the pa= ge table. @@ -128,52 +159,41 @@ NOTE: The SMM does not set the not-present bit for th= e GCD **EfiGcdMemoryTypeNon ## Limitation Setting up RO and NX attribute for SMRAM is a good enhancement to prevent = a code overriding attack. However it has some limitations: =20 -1. It cannot resist a Return-Oriented-Programming (ROP) attack. [[ROP][8]]= . We might need ASLR to mitigate the ROP attack. [[ASLR][7]] With the code = region randomized, an attacker cannot accurately predict the location of in= structions in order to leverage gadgets. -2. Not all important data structure are set to Read-Only. This is the curr= ent SMM driver limitation. The SMM driver can be updated to allocate the im= portant structures to be read-only instead of a read-write global variable. +1. It cannot resist a Return-Oriented-Programming (ROP) attack. [[ROP][8]]= . We might need ASLR to mitigate the ROP attack. [[ASLR][7]] With the code = region randomized, an attacker cannot accurately predict the location of in= structions in order to leverage gadgets. +2. Not all important data structure are set to Read-Only. This is the curr= ent SMM driver limitation. The SMM driver can be updated to allocate the im= portant structures to be read-only instead of a read-write global variable. =20 To set not-present bit for non-fixed DRAM region in SmmReadyToLock is a go= od enhancement to enforce the protection policy. However, it cannot cover b= elow cases: =20 -1. Memory Hot Plug. Take a server platform as the example, A RAS server ma= y hot plug more DRAM during OS runtime, and rely on SMM to initialize those= DRAM. This SMM Memory Initialization module may need access the DRAM for t= he memory test. -2. Memory Mapped IO (MMIO). Ideally, not all MMIO regions are configured t= o be accessible to SMM. Some MMIO BARs are important such as VTd or SPI con= troller. VTd BAR is important because OS need setup VTd to configuration t= he DMA protection. SPI controller BAR is important because BIOS SMM handler= need access it to program the flash device. It should be a platform policy= to configure which one should be accessible. The SMI handler must consider= the case that the MMIO BAR might be modified by the malicious software and= check if the MMIO BAR is in the valid region. +1. Memory Hot Plug. Take a server platform as the example, A RAS server ma= y hot plug more DRAM during OS runtime, and rely on SMM to initialize those= DRAM. This SMM Memory Initialization module may need access the DRAM for t= he memory test. +2. Memory Mapped IO (MMIO). Ideally, not all MMIO regions are configured t= o be accessible to SMM. Some MMIO BARs are important such as VTd or SPI con= troller. VTd BAR is important because OS need setup VTd to configuration t= he DMA protection. SPI controller BAR is important because BIOS SMM handler= need access it to program the flash device. It should be a platform policy= to configure which one should be accessible. The SMI handler must consider= the case that the MMIO BAR might be modified by the malicious software and= check if the MMIO BAR is in the valid region. =20 ## Compatibility Considerations -1. So far, we have not observed self-modified-code in SMM image or executa= ble code in data section. As such, we believe the PE image protection is co= mpatible. +1. So far, we have not observed self-modified-code in SMM image or executa= ble code in data section. As such, we believe the PE image protection is co= mpatible. =20 -2. The protection for the SMM communication buffer may cause a #PF excepti= on in SMM if the SMI handler does not perform the check recommended in [[Se= cureSmmComm][6]]. +2. The protection for the SMM communication buffer may cause a #PF excepti= on in SMM if the SMI handler does not perform the check recommended in [[Se= cureSmmComm][6]]. =20 -3. Some legacy Compatibility Support Module (CSM) drivers may need co-work= with SMM module. Then the SMM driver need access the legacy region. As suc= h these memory regions should be allocated as ReservedMemory, such as BIOS = data area (BDA) or extended BIOS data area (EBDA). +3. Some legacy Compatibility Support Module (CSM) drivers may need co-wor= k with SMM module. Then the SMM driver need access the legacy region. As su= ch these memory regions should be allocated as ReservedMemory, such as BIOS= data area (BDA) or extended BIOS data area (EBDA). =20 ## Call for action In order to support SMM memory protection, the firmware need configure SMM= driver to be page aligned: -1. Override link flags below to support SMM memory protection. - ```css +1. Override link flags below to support SMM memory protection. + ``` [BuildOptions.common.EDKII.DXE_SMM_DRIVER, - BuildOptions.common.EDKII.SMM_CORE]=09 - MSFT:*_*_*_DLINK_FLAGS =3D /ALIGN:4096=20 - GCC:*_*_*_DLINK_FLAGS =3D -z common-page-size=3D0x1000 - ``` + BuildOptions.common.EDKII.SMM_CORE] + MSFT:*_*_*_DLINK_FLAGS =3D /ALIGN:4096 + GCC:*_*_*_DLINK_FLAGS =3D -z common-page-size=3D0x1000 + ``` =20 -2. Evaluate if SMRAM size is big enough. +2. Evaluate if SMRAM size is big enough. =20 #### Summary This section introduces the memory protection in SMM. =20 [1]: https://software.intel.com/en-us/articles/intel-sdm "IA32SDM" [2]: http://uefi.org "PI Spec" - - - [3]: https://msdn.microsoft.com/en-us/library/windows/hardware/dn495660(v= =3Dvs.85).aspx#wsmt "WindowsWSMT" - [4]: http://download.microsoft.com/download/1/8/A/18A21244-EB67-4538-BAA2-= 1A54E0E490B6/WSMT.docx "WindowsWSMT docx" -[5]: https://msdn.microsoft.com/en-us/library/windows/hardware/dn614617 "= MicrosoftHV" -[6]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tou= r_Beyond_BIOS_Secure_SMM_Communication.pdf "SecureSmmComm" - - +[5]: https://msdn.microsoft.com/en-us/library/windows/hardware/dn614617 "M= icrosoftHV" +[6]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour= _Beyond_BIOS_Secure_SMM_Communication.pdf "SecureSmmComm" [7]: https://en.wikipedia.org/wiki/Address_space_layout_randomization "ASL= R" - [8]: https://en.wikipedia.org/wiki/Return-oriented_programming "ROP" - - - -=E2=80=83 diff --git a/memory-protection-in-uefi.md b/memory-protection-in-uefi.md index 635e0f8..255663d 100644 --- a/memory-protection-in-uefi.md +++ b/memory-protection-in-uefi.md @@ -1,24 +1,55 @@ + + # Memory Protection in UEFI In the white paper [[MemMap][1]], we discussed to how to report the runtim= e memory attribute by using `EFI_MEMORY_ATTRIBUTES_TABLE`, so that OS can a= pply the protection for the runtime code and data. This may bring some comp= atibility concerns if we choose to adopt the full DEP protection for the en= tire UEFI memory. =20 =20 In order to resolve the compatibility concerns, we can define a policy-bas= ed setting to enable partial NX and RO protection for the UEFI memory regio= n. The detailed information will be discussed below. -![](/assets/Fig4 - UEFI memory protection.jpg) -=20 -Figure 4 - UEFI memory protection +![](/media/Fig4 - UEFI memory protection.jpg) + +###### Figure 4 - UEFI memory protection =20 ## Protection for PE image The DXE core may apply a pre-defined policy to set up the NX attribute for= the PE data region and the RO attribute for the PE code region. =20 -1. The image is loaded by the UEFI boot service - `LoadImage()`. If an ima= ge is loaded in some other way, the DXE core does not have such knowledge a= nd the DXE core cannot apply any protection. -2. The image section is page aligned. If an image is not page aligned, the= DXE core cannot apply the page level protection. -3. The protection policy can be based upon a PCD =E2=80=98PcdImageProtecti= onPolicy`. (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeM= odulePkg.dec) Whenever a new image is loaded, the DxeCore checks the source= of the image and then decides the policy of the protection. The policy cou= ld be to enable the protection if the sections are aligned, or disable the = protection. The platform may choose the policy based upon the need. For exa= mple, if a platform thinks the image from the firmware volume should be cap= able of being protection, it can set protection for IMAGE_FROM_FV. But if a= platform is not sure about a PCI option ROM or a file system on disk, it c= an set no-protection. +1. The image is loaded by the UEFI boot service - `LoadImage()`. If an ima= ge is loaded in some other way, the DXE core does not have such knowledge a= nd the DXE core cannot apply any protection. +2. The image section is page aligned. If an image is not page aligned, the= DXE core cannot apply the page level protection. +3. The protection policy can be based upon a PCD `PcdImageProtectionPolicy= `. (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkg= .dec) Whenever a new image is loaded, the DxeCore checks the source of the = image and then decides the policy of the protection. The policy could be to= enable the protection if the sections are aligned, or disable the protecti= on. The platform may choose the policy based upon the need. For example, if= a platform thinks the image from the firmware volume should be capable of = being protection, it can set protection for IMAGE_FROM_FV. But if a platfor= m is not sure about a PCI option ROM or a file system on disk, it can set n= o-protection. =20 There are assumptions for the PE image protection in UEFI: =20 -1. [Same as SMM] The PE code section and data sections are not merged. If = those 2 sections are merged, a #PF exception might be generated because the= CPU may try to write a RO data in data section or execute a NX instruction= in the code section. -2. [Same as SMM] The PE image can be protected if it is page aligned. Ther= e should not be any self-modifying-code in the code region. If there is, a = platform should not set this PE image to be page aligned. -3. A platform may not disable the XD in the DXE phase. If a platform disab= les the XD in the DXE phase, the X86 page table will become invalid because= the XD bit in page table becomes a RESERVED bit. The consequence is that a= #PF exception will be generated. If a platform wants to disable the XD bit= , it must happen in the PEI phase. +1. [Same as SMM] The PE code section and data sections are not merged. If = those 2 sections are merged, a #PF exception might be generated because the= CPU may try to write a RO data in data section or execute a NX instruction= in the code section. +2. [Same as SMM] The PE image can be protected if it is page aligned. Ther= e should not be any self-modifying-code in the code region. If there is, a = platform should not set this PE image to be page aligned. +3. A platform may not disable the XD in the DXE phase. If a platform disab= les the XD in the DXE phase, the X86 page table will become invalid because= the XD bit in page table becomes a RESERVED bit. The consequence is that a= #PF exception will be generated. If a platform wants to disable the XD bit= , it must happen in the PEI phase. =20 In EDK II, the DXE core image services calls `ProtectUefiImage()` on image= load and `UnprotectUefiImage()` on image unload. (https://github.com/tiano= core/edk2/blob/master/MdeModulePkg/Core/Dxe/Image/Image.c) Then `ProtectUef= iImageCommon()` (https://github.com/tianocore/edk2/blob/master/MdeModulePkg= /Core/Dxe/Misc/MemoryProtection.c) calls `GetUefiImageProtectionPolicy()` t= o check the image source and protection policy and parses PE alignment. If = all checks pass, `SetUefiImageProtectionAttributes()` calls `SetUefiImageMe= moryAttributes()`. Finally, `gCpu->SetMemoryAttribute()` sets **EFI_MEMORY_= XP** or **EFI_MEMORY_RO** for the new loaded image , or clears the protecti= on for the old unloaded image. When the CPU driver gets the memory attribut= e setting request, it updates page table. =20 @@ -26,22 +57,22 @@ The X86 CPU driver https://github.com/tianocore/edk2/bl= ob/master/UefiCpuPkg/CpuD =20 The ARM CPU driver https://github.com/tianocore/edk2/blob/master/ArmPkg/Dr= ivers/CpuDxe/CpuMmuCommon.c `CpuSetMemoryAttributes()` also has similar cap= ability. =20 -If an image is loaded before CPU_ARCH protocol is ready, the DXE core just= skips the setting. Later these images protection will be set in CPU_ARCH c= allback function =E2=80=93 `MemoryProtectionCpuArchProtocolNotify() `(https= ://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryP= rotection.c). +If an image is loaded before CPU_ARCH protocol is ready, the DXE core just= skips the setting. Later these images protection will be set in CPU_ARCH c= allback function - `MemoryProtectionCpuArchProtocolNotify()`(https://github= .com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection= .c). =20 In `ExitBootServices` event, `MemoryProtectionExitBootServicesCallback() `= (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/M= emoryProtection.c) is invoked to unprotect the runtime image, because the r= untime image code relocation need write code segment at `SetVirtualAddressM= ap()`. =20 ## Protection for stack and heap -[[UEFI][2]] specification allows=20 ->"Stack may be marked as non-executable in identity mapped page tables."=20 +[[UEFI][2]] specification allows +>"Stack may be marked as non-executable in identity mapped page tables." =20 As such, we set up the NX stack (https://github.com/tianocore/edk2/blob/ma= ster/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c, `CreateIdentityMappi= ngPageTables()`). =20 =20 =20 -The heap protection is based upon the policy, because we already observed = some unexpected usage in [[MemMap][1]] white paper. A platform needs to co= nfigure a PCD `PcdDxeNxMemoryProtectionPolicy`=20 +The heap protection is based upon the policy, because we already observed = some unexpected usage in [[MemMap][1]] white paper. A platform needs to co= nfigure a PCD `PcdDxeNxMemoryProtectionPolicy` (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkg.d= ec) to indicate which type of memory can be set to NX in the page table. Th= e DxeCore `ApplyMemoryProtectionPolicy()` (https://github.com/tianocore/edk= 2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c) consumes the P= CD after the memory allocation service and sets NX attribute for the alloca= ted memory by using CPU_ARCH protocol. =20 -Before CPU_ARCH protocol is ready, the protection takes no effect. In CPU_= ARCH callback function =E2=80=93 `MemoryProtectionCpuArchProtocolNotify() `= (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/M= emoryProtection.c), the `InitializeDxeNxMemoryProtectionPolicy()` is called= to get current memory map and setup the NX protection. +Before CPU_ARCH protocol is ready, the protection takes no effect. In CPU_= ARCH callback function - `MemoryProtectionCpuArchProtocolNotify() `(https:/= /github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Misc/MemoryPro= tection.c), the `InitializeDxeNxMemoryProtectionPolicy()` is called to get = current memory map and setup the NX protection. =20 =20 In addition, we may use some special techniques, such as the guard page, t= o apply the protection for the allocated memory in order to detect a buffer= overflow. This is discussed in [[SecurityEnhancement][3]] white paper. @@ -58,10 +89,10 @@ The UEFI firmware does not own page tables after `ExitB= ootServices()`, so the OS =20 ## Size Overhead =20 -1. Runtime memory overhead (visible to OS) -: The size overhead of the runtime PE image is the same as the overhead of= the SMM PE image. If a platform has n runtime images, the average amount = overhead is `6K * n`. -2. Boot time memory overhead (invisible to OS) -: The size of the overhead for the boot time PE image is the same as the o= verhead of the SMM PE image. If a platform has n boot time images, the aver= age overhead is `6K * n`. +1. Runtime memory overhead (visible to OS) +: The size overhead of the runtime PE image is the same as the overhead of= the SMM PE image. If a platform has n runtime images, the average amount = overhead is `6K * n`. +2. Boot time memory overhead (invisible to OS) +: The size of the overhead for the boot time PE image is the same as the o= verhead of the SMM PE image. If a platform has n boot time images, the aver= age overhead is `6K * n`. =20 If the NX protection for data is enabled, the size of the page table is in= creased because we need set fine granularity page level protection. =20 @@ -70,10 +101,10 @@ The size overhead of the boot time page table is also = same as for the SMM static ## Limitation The protection in the UEFI is limited to the PE image and the stack at thi= s moment because of the compatibility concerns. The limitations of the UEFI= memory protection are: =20 -1. Not all images are protected to be NX and RO. The protection is based u= pon the policy. -2. Not all heap regions are protected to be NX due to the compatibility co= ncern. We observed that both Windows boot loader and Linux boot loader may = use the LoaderData type for the code. The heap protection is based upon the= policy. -3. [Same as SMM] The protection cannot resist ROP attack. -4. [Same as SMM] Not all important data structures are set to ReadOnly. +1. Not all images are protected to be NX and RO. The protection is based u= pon the policy. +2. Not all heap regions are protected to be NX due to the compatibility co= ncern. We observed that both Windows boot loader and Linux boot loader may = use the LoaderData type for the code. The heap protection is based upon the= policy. +3. [Same as SMM] The protection cannot resist ROP attack. +4. [Same as SMM] Not all important data structures are set to ReadOnly. =20 ## Compatibility Consideration A platform may need to evaluate and select the image protection policy bas= ed upon the capability of the platform image, Option ROM, and OS loader. Fo= r platform images, the Compatibility Support Module (CSM) and the EDK-I Com= patibility Package (ECP) modules should be considered. If a platform observ= es the compatibility issues, it should choose 1) to disable the protection,= or 2) to fix the compatibility issue and enable the protection. @@ -81,36 +112,31 @@ A platform may need to evaluate and select the image p= rotection policy based upo ## Call for action In order to support UEFI memory protection, the firmware need configure UE= FI driver to be page aligned: =20 -1. Override link flags below to support UEFI runtime attribute table, so t= hat OS can protect the runtime memory. -```css=20 +1. Override link flags below to support UEFI runtime attribute table, so t= hat OS can protect the runtime memory. +``` [BuildOptions.IA32.EDKII.DXE_RUNTIME_DRIVER, BuildOptions.X64.EDKII.DXE_RU= NTIME_DRIVER] -MSFT:*_*_*_DLINK_FLAGS =3D /ALIGN:4096=20 +MSFT:*_*_*_DLINK_FLAGS =3D /ALIGN:4096 GCC:*_*_*_DLINK_FLAGS =3D -z common-page-size=3D0x1000 ``` -2. Override link flags below to support UEFI memory protection. -```css -[BuildOptions.common.EDKII.DXE_DRIVER,=20 -BuildOptions.common.EDKII.DXE_CORE,=20 +2. Override link flags below to support UEFI memory protection. +``` +[BuildOptions.common.EDKII.DXE_DRIVER, +BuildOptions.common.EDKII.DXE_CORE, BuildOptions.common.EDKII.UEFI_DRIVER, BuildOptions.common.EDKII.UEFI_APPL= ICATION] -MSFT:*_*_*_DLINK_FLAGS =3D /ALIGN:4096=20 +MSFT:*_*_*_DLINK_FLAGS =3D /ALIGN:4096 GCC:*_*_*_DLINK_FLAGS =3D -z common-page-size=3D0x1000 ``` -3. Evaluate if the UEFI memory size is big enough to hold the split page t= able. +3. Evaluate if the UEFI memory size is big enough to hold the split page = table. =20 -4. Evaluate if the DXE image can be protected. +4. Evaluate if the DXE image can be protected. =20 -5. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy`. - -6. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPoli= cy`. +5. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy`. =20 +6. Set proper `gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPoli= cy`. =20 #### Summary This section introduces the memory protection in UEFI. =20 [1]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour= _Beyond_BIOS_Memory_Map_And_Practices_in_UEFI_BIOS_V2.pdf "MemMap" - - [2]: http://uefi.org "UEFI" - - [3]: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour= _Beyond_BIOS_Securiy_Enhancement_to_Mitigate_Buffer_Overflow_in_UEFI.pdf "S= ecurity Enhancment" \ No newline at end of file diff --git a/references.md b/references.md index 23894e0..c9ffab7 100644 --- a/references.md +++ b/references.md @@ -1,10 +1,41 @@ + + # References =20 [ASLR] Address Space Layout Randmization, https://en.wikipedia.org/wiki/Ad= dress_space_layout_randomization =20 -[DEP] Exploit Mitigation Improvements in Windows 8, Ken Johnson, Ma, Mille= r, http://media.blackhat.com/bh-us-12/Briefings/M_Miller/BH_US_12_Miller_Ex= ploit_Mitigation_Slides.pdf=20 +[DEP] Exploit Mitigation Improvements in Windows 8, Ken Johnson, Ma, Mille= r, http://media.blackhat.com/bh-us-12/Briefings/M_Miller/BH_US_12_Miller_Ex= ploit_Mitigation_Slides.pdf =20 -[IA32SDM] Intel=C2=AE 64 and IA-32 Architectures Software Developer=E2=80= =99s Manual, www.intel.com https://software.intel.com/en-us/articles/intel-= sdm +[IA32SDM] Intel(R) 64 and IA-32 Architectures Software Developer's Manual,= www.intel.com https://software.intel.com/en-us/articles/intel-sdm =20 [MemMap] A Tour Beyond BIOS Memory Map And Practices in UEFI BIOS, Jiewen = Yao, Vincent Zimmer, 2016 https://github.com/tianocore-docs/Docs/raw/master= /White_Papers/A_Tour_Beyond_BIOS_Memory_Map_And_Practices_in_UEFI_BIOS_V2.p= df =20 @@ -12,25 +43,22 @@ =20 [ROP] Return-oriented programming, https://en.wikipedia.org/wiki/Return-or= iented_programming =20 -[SecureSmmComm] A Tour Beyond BIOS Secure SMM Communication, Jiewen Yao, V= incent Zimmer, Star Zeng, 2016, https://github.com/tianocore-docs/Docs/raw/= master/White_Papers/A_Tour_Beyond_BIOS_Secure_SMM_Communication.pdf=20 +[SecureSmmComm] A Tour Beyond BIOS Secure SMM Communication, Jiewen Yao, V= incent Zimmer, Star Zeng, 2016, https://github.com/tianocore-docs/Docs/raw/= master/White_Papers/A_Tour_Beyond_BIOS_Secure_SMM_Communication.pdf =20 [SecurityEnhancement] A Tour Beyond BIOS Securiy Enhancement to Mitigate B= uffer Overflow in UEFI, Jiewen Yao, Vincent Zimmer, 2016, https://github.co= m/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Securiy_En= hancement_to_Mitigate_Buffer_Overflow_in_UEFI.pdf =20 [SecurityDesign] A Tour Beyond BIOS Security Design Guide in EDK II, Jiewe= n Yao, Vincent Zimmer, 2016, https://github.com/tianocore-docs/Docs/raw/mas= ter/White_Papers/A_Tour_Beyond_BIOS_Security_Design_Guide_in_EDK_II.pdf =20 -[UEFI] Unified Extensible Firmware Interface (UEFI) Specification, Version= 2.6 =20 -www.uefi.org=20 +[UEFI] Unified Extensible Firmware Interface (UEFI) Specification, Version= 2.6 +www.uefi.org =20 -[VTd] Intel=C2=AE Virtualization Technology for Directed I/O: Spec, http:/= /www.intel.com/content/www/us/en/embedded/technology/virtualization/vt-dire= cted-io-spec.html +[VTd] Intel(R) Virtualization Technology for Directed I/O: Spec, http://ww= w.intel.com/content/www/us/en/embedded/technology/virtualization/vt-directe= d-io-spec.html =20 [WindowsHeap] Preventing the exploitation of user mode heap corruption vul= nerabilities, 2009, https://blogs.technet.microsoft.com/srd/2009/08/04/prev= enting-the-exploitation-of-user-mode-heap-corruption-vulnerabilities/ =20 [WindowsInternal] Windows Internals, 6th edition, Mark E. Russinovich, Dav= id A. Solomon, Alex Ionescu, 2012, Microsoft Press. ISBN-13: 978-0735648739= /978-0735665873 =20 [WindowsWSMT] Windows SMM Security Table, https://msdn.microsoft.com/en-us= /library/windows/hardware/dn495660(v=3Dvs.85).aspx#wsmt -http://download.microsoft.com/download/1/8/A/18A21244-EB67-4538-BAA2-1A54E= 0E490B6/WSMT.docx=20 - -[MicrosoftHV] Microsoft Hypervisor Requirements, https://msdn.microsoft.co= m/en-us/library/windows/hardware/dn614617=20 - +http://download.microsoft.com/download/1/8/A/18A21244-EB67-4538-BAA2-1A54E= 0E490B6/WSMT.docx =20 -=E2=80=83 +[MicrosoftHV] Microsoft Hypervisor Requirements, https://msdn.microsoft.co= m/en-us/library/windows/hardware/dn614617 --=20 2.29.2.windows.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 (#68728): https://edk2.groups.io/g/devel/message/68728 Mute This Topic: https://groups.io/mt/78887921/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 Sun Oct 5 19:01:43 2025 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+68729+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+68729+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1607717282; cv=none; d=zohomail.com; s=zohoarc; b=I2zj68/4SBE/ETN2jupRSz00d+im43v8go1U+UCbL9RDvhxSSGWREkAJA1TTLZtsiNNJtZk3EOJLO9fwvvQwGujT2aQgfkFarBurKldCBuOGueqWXM4jKpHrZHQuA7V9nH66athzOhoicOGeNWdwaJ/KtiAJ3fWz3qFsgEJTpxQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607717282; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=QXAKKJvsyLr4RjyHKJUFdQcIeaNM9rH1wo5b0vpvTKo=; b=Akwtpa6dTyXpFG4a7qTfm+kbSmK4jnAtbunu5bBGT12sF0YT3I9VFzMgOpEf5FApDXV22z2IuIMIlEfbQ4dZL9ugOPjWmp7ep2P8rovzIHxVWFpE1xPzfvaoiOWekD0rn1BSMvaFA3tZ5TvWiPBU/SUlcN7Qvl31gMD46mTROkU= 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+68729+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1607717281891242.09726353281474; Fri, 11 Dec 2020 12:08:01 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id fBeuYY1788612xNJi9ShDQJl; Fri, 11 Dec 2020 12:07:59 -0800 X-Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web08.12911.1607717276469634820 for ; Fri, 11 Dec 2020 12:07:56 -0800 IronPort-SDR: x1DoKR8osxoAuijZ5x5ni04SDq5egLIhfXFxJrQTwKhCAhWGfUTbRYxf0uV1riBzUHAuQ9fI01 rjlW+TsYHsnQ== X-IronPort-AV: E=McAfee;i="6000,8403,9832"; a="154302275" X-IronPort-AV: E=Sophos;i="5.78,412,1599548400"; d="scan'208";a="154302275" X-Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2020 12:07:56 -0800 IronPort-SDR: a0UYtDUSSOp2jE6F20AeRv8e5Ct0C4Nd28KYMcx2zuQzb9X77owavLTKeN1qqChQKqAG4D6ML8 hwG4EArK4NZw== X-IronPort-AV: E=Sophos;i="5.78,412,1599548400"; d="scan'208";a="365601932" X-Received: from mdkinney-mobl2.amr.corp.intel.com ([10.212.203.56]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2020 12:07:55 -0800 From: "Michael D Kinney" To: devel@edk2.groups.io Cc: Jiewen Yao , Vincent Zimmer , Laurie Jarlstrom , Kevin Shaw Subject: [edk2-devel] [tianocore-docs][ATBB-Memory_Protection_in_UEFI_BIOS][Patch 2/2] Update to match template and enable GitBook action Date: Fri, 11 Dec 2020 12:07:48 -0800 Message-Id: <20201211200748.1622-3-michael.d.kinney@intel.com> In-Reply-To: <20201211200748.1622-1-michael.d.kinney@intel.com> References: <20201211200748.1622-1-michael.d.kinney@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: 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,michael.d.kinney@intel.com X-Gm-Message-State: thzC3RfRWOt1xJHgJaIKxoJgx1787277AA= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1607717279; bh=Enc6T1bubYsn+2M8rjQZzrdbwZDJKHb5RLqTZA/qVcQ=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=leQdwQRzT+HZyj4jz/kKLeHKS6QRPsY0D8apkwFWwv/vBqPKAw3jrA8ogahCACgcfTV Gq/VNDsywWCVeNMRrmqKFSJ2t6YHMd4wxBRNM5tLF9wDnYiJ5dh6BngXzyG/0Xl+uergm WfWPNinPzr1wSr1Cm4hiAXTT0MYAa1XDoUw= X-ZohoMail-DKIM: pass (identity @groups.io) * Add layout directory to match template * Update CSS styles to match template * Add GitBook Action Cc: Jiewen Yao Cc: Vincent Zimmer Cc: Laurie Jarlstrom Cc: Kevin Shaw Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney Reviewed-by: Jiewen Yao --- .bookignore | 3 + .github/workflows/gitbook-action.yml | 39 +++++ .gitignore | 10 +- _layouts/ebook/page.html | 42 +++++ _layouts/ebook/pdf_footer.html | 17 ++ _layouts/ebook/pdf_header.html | 14 ++ _layouts/ebook/summary.html | 98 ++++++++++++ _layouts/layout.html | 27 ++++ _layouts/website/footer.html | 17 ++ _layouts/website/header.html | 31 ++++ _layouts/website/languages.html | 19 +++ _layouts/website/layout.html | 28 ++++ _layouts/website/page.html | 86 +++++++++++ _layouts/website/summary.html | 61 ++++++++ styles/epub.css | 221 ++------------------------ styles/mobi.css | 50 ++++++ styles/pdf.css | 221 +++----------------------- styles/website.css | 223 +++------------------------ 18 files changed, 591 insertions(+), 616 deletions(-) create mode 100644 .bookignore create mode 100644 .github/workflows/gitbook-action.yml create mode 100644 _layouts/ebook/page.html create mode 100644 _layouts/ebook/pdf_footer.html create mode 100644 _layouts/ebook/pdf_header.html create mode 100644 _layouts/ebook/summary.html create mode 100644 _layouts/layout.html create mode 100644 _layouts/website/footer.html create mode 100644 _layouts/website/header.html create mode 100644 _layouts/website/languages.html create mode 100644 _layouts/website/layout.html create mode 100644 _layouts/website/page.html create mode 100644 _layouts/website/summary.html create mode 100644 styles/mobi.css diff --git a/.bookignore b/.bookignore new file mode 100644 index 0000000..ed716f0 --- /dev/null +++ b/.bookignore @@ -0,0 +1,3 @@ +/.github +.gitignore +.bookignore diff --git a/.github/workflows/gitbook-action.yml b/.github/workflows/gitbo= ok-action.yml new file mode 100644 index 0000000..917b0d7 --- /dev/null +++ b/.github/workflows/gitbook-action.yml @@ -0,0 +1,39 @@ +name: 'Gitbook Action Build' +on: + push: + branches: + - master + - release/* + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout action + uses: actions/checkout@v2 + - name: Get Branch + run: | + raw=3D$(git branch -r --contains ${{ github.ref }}) + branch=3D${raw/ origin\/} + pubdir=3D${branch/master/draft} + pubdir=3D${pubdir////-} + echo "ON_PUSH_BRANCH_NAME=3D$branch" >> $GITHUB_ENV + echo "ON_PUSH_PUBDIR=3D$pubdir" >> $GITHUB_ENV + - name: Gitbook Action + uses: zanderzhao/gitbook-action@v1.2.4 + with: + token: ${{secrets.GITBOOK_ACTION_PERSONAL_TOKEN}} + source_branch: ${{env.ON_PUSH_BRANCH_NAME}} + publish_branch: gh-pages + publish_dir: ${{env.ON_PUSH_PUBDIR}} + publish_remove_last_build: true + gitbook_pdf: true + gitbook_pdf_dir: / + gitbook_pdf_name: ${{ github.event.repository.name }}-${{env.ON_PU= SH_PUBDIR}} + gitbook_epub: true + gitbook_epub_dir: / + gitbook_epub_name: ${{ github.event.repository.name }}-${{env.ON_P= USH_PUBDIR}} + gitbook_mobi: true + gitbook_mobi_dir: / + gitbook_mobi_name: ${{ github.event.repository.name }}-${{env.ON_P= USH_PUBDIR}} diff --git a/.gitignore b/.gitignore index 1a366fb..e9c50d9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,12 +5,12 @@ ## Dependency directory ## Commenting this out is preferred by some people, see ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-i= nto-git -node_modules +/node_modules =20 # Book build output -_book +/_book =20 # eBook build output -*.epub -*.mobi -*.pdf \ No newline at end of file +/book.epub +/book.mobi +/book.pdf \ No newline at end of file diff --git a/_layouts/ebook/page.html b/_layouts/ebook/page.html new file mode 100644 index 0000000..9dec3b5 --- /dev/null +++ b/_layouts/ebook/page.html @@ -0,0 +1,42 @@ +{% extends "layout.html" %} + +{% block title %}{{ page.title }}{% endblock %} +{% block description %}{{ page.description }}{% endblock %} + +{% block style %} + {### Include theme css before plugins css ###} + {% if not fileExists(config.styles.print) %} + {% if options.format %} + + {% else %} + + {% endif %} + {% endif %} + + {{ super() }} + + {### Custom stylesheets for the book ###} + + {% for type, style in config.styles %} + {% if fileExists(style) and (type =3D=3D "ebook" or type =3D=3D "p= rint" or type =3D=3D options.format) %} + + {% endif %} + {% endfor %} +{% endblock %} + +{% block body %} +
+ {% block page %} +

{{ page.t= itle }}

+ {% if options.format =3D=3D "mobi" %} +
+ {{ page.content|safe }} +
+ {% else %} +
+ {{ page.content|safe }} +
+ {% endif %} + {% endblock %} +
+{% endblock %} diff --git a/_layouts/ebook/pdf_footer.html b/_layouts/ebook/pdf_footer.html new file mode 100644 index 0000000..709fa57 --- /dev/null +++ b/_layouts/ebook/pdf_footer.html @@ -0,0 +1,17 @@ +{% extends "./page.html" %} + +{% block body %} +
+ {% if book.draft %} +

+

DRAFT FOR REVIEW [{= { gitbook.time|date('MM/DD/YYYY hh:mm:ss') }}]
+
{{ page.num }}
+

=20 + {% else %} +

+

{{ book.version }}<= /div> +
{{ page.num }}
+

=20 + {% endif %} +
+{% endblock %} diff --git a/_layouts/ebook/pdf_header.html b/_layouts/ebook/pdf_header.html new file mode 100644 index 0000000..05c7450 --- /dev/null +++ b/_layouts/ebook/pdf_header.html @@ -0,0 +1,14 @@ +{% extends "./page.html" %} + +{% block body %} +
+

+ {% if book.draft %} +

{{ book.title }}[DR= AFT]
+ {% else %} +
{{ book.title }} + {% endif %} +
{{ page.title }}
+

=20 +
+{% endblock %} diff --git a/_layouts/ebook/summary.html b/_layouts/ebook/summary.html new file mode 100644 index 0000000..946e8cb --- /dev/null +++ b/_layouts/ebook/summary.html @@ -0,0 +1,98 @@ +{% extends "./page.html" %} + +{% block title %}{{ "SUMMARY"|t }}{% endblock %} + +{% macro articles(_articles) %} + {% for article in _articles %} + {% if options.format =3D=3D "mobi" %} +
+ {% else %} +
  • + {% endif %} + + {% if article.path or article.url %} + {% if article.path %} + {{ article.title }} + {% else %} + {{= article.title }} + {% endif %} + {% else %} + {{ article.title }} + {% endif %} + {% if 0 %} + {{ article.level }} + {% endif %} + + {% if article.articles.length > 0 %} + {% if options.format =3D=3D "mobi" %} +
    + {{ articles(article.articles) }} +
    + {% else %} +
      + {{ articles(article.articles) }} +
    + {% endif %} + {% endif %} + {% if options.format =3D=3D "mobi" %} +
  • + {% else %} + + {% endif %} + {% endfor %} +{% endmacro %} + +{% block page %} +{% if options.format =3D=3D "mobi" %} +
    +{% else %} +
    +{% endif %} +

    {{ "SUMMARY"|t }}

    + {% if options.format =3D=3D "mobi" %} +
    + {% else %} +
      + {% endif %} + {% for part in summary.parts %} + {% if part.title %} + {% if options.format =3D=3D "mobi" %} +
      + {{ part.title }} +
      + {% else %} +
    1. + {{ part.title }} +
    2. + {% endif %} + {% endif %} + {{ articles(part.articles) }} + + {% if not loop.last and not options.format =3D=3D "mobi" %} +
    3. + {% endif %} + {% endfor %} + + {% if glossary.path %} + {% if options.format =3D=3D "mobi" %} +
      + + {{ "GLOSSARY"|t }} + +
      + {% else %} +
    4. + + {{ "GLOSSARY"|t }} + +
    5. + {% endif %} + {% endif %} + {% if options.format =3D=3D "mobi" %} +
    + {% else %} + + {% endif %} +
    +{% endblock %} + diff --git a/_layouts/layout.html b/_layouts/layout.html new file mode 100644 index 0000000..884574c --- /dev/null +++ b/_layouts/layout.html @@ -0,0 +1,27 @@ + + + + + + {% block title %}{{ config.title|d("GitBook", true) }}{% en= dblock %} + + + + {% if config.author %}{% endif %} + {% if config.isbn %}{% endif %} + {% block style %} + {% for resource in plugins.resources.css %} + {% if resource.url %} + + {% else %} + + {% endif %} + {% endfor %} + {% endblock %} + {% block head %}{% endblock %} + + + {% block body %}{% endblock %} + {% block javascript %}{% endblock %} + + diff --git a/_layouts/website/footer.html b/_layouts/website/footer.html new file mode 100644 index 0000000..c37da01 --- /dev/null +++ b/_layouts/website/footer.html @@ -0,0 +1,17 @@ +{% block book_footer %} +
    +
    + {% if book.draft %} +

    +
    {{ book.title }}<= /div> +
    DRAF= T [{{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }}]
    +
    {{ book.version }}
    +

    =20 + {% else %} +

    +
    {{ book.title }}<= /div> +
    {{ book.version }}
    +

    =20 + {% endif %} +
    +{% endblock %} diff --git a/_layouts/website/header.html b/_layouts/website/header.html new file mode 100644 index 0000000..2e5971c --- /dev/null +++ b/_layouts/website/header.html @@ -0,0 +1,31 @@ +{% block book_header %} +
    + {% if glossary.path %} + + {% endif %} + + +

    + + {{ page.title }} +

    +
    +
    + + {% if book.draft %} +

    +
    {{ book.title }}<= /div> +
    DRAF= T [{{ gitbook.time|date('MM/DD/YYYY hh:mm:ss') }}]
    +
    {{ book.version }}
    +

    =20 + {% else %} +

    +
    {{ book.title }}<= /div> +
    {{ book.version }}
    +

    =20 + {% endif %} +
    +
    +{% endblock %} diff --git a/_layouts/website/languages.html b/_layouts/website/languages.h= tml new file mode 100644 index 0000000..a9d43be --- /dev/null +++ b/_layouts/website/languages.html @@ -0,0 +1,19 @@ +{% extends "./layout.html" %} + +{% block title %}{{ "LANGS_CHOOSE"|t }} =C2=B7 {{ super() }}{% endblock %} + +{% block body %} +
    +
    +

    {{ "LANGS_CHOOSE"|t }}

    + + +
    +
    +{% endblock %} diff --git a/_layouts/website/layout.html b/_layouts/website/layout.html new file mode 100644 index 0000000..5fa7fe8 --- /dev/null +++ b/_layouts/website/layout.html @@ -0,0 +1,28 @@ +{% extends "layout.html" %} + +{% block head %} + {{ super() }} + + + + + + +{% endblock %} + +{% block style %} + {### Include theme css before plugins css ###} + + + {{ super() }} + + {### Custom stylesheets for the book ###} + + {% for type, style in config.styles %} + {% if fileExists(style) and type =3D=3D "website" %} + + {% endif %} + {% endfor %} +{% endblock %} + +{% block body %}{% endblock %} diff --git a/_layouts/website/page.html b/_layouts/website/page.html new file mode 100644 index 0000000..d78a348 --- /dev/null +++ b/_layouts/website/page.html @@ -0,0 +1,86 @@ +{% extends "./layout.html" %} + +{% block title %}{{ page.title }} =C2=B7 {{ super() }}{% endblock %} + +{% block description %}{{ page.description }}{% endblock %} + +{% block head %} + {{ super() }} + {% if page.next and page.next.path %} + + {% endif %} + {% if page.previous and page.previous.path %} + + {% endif %} +{% endblock %} + +{% block javascript %} + + + {% for resource in plugins.resources.js %} + {% if resource.url %} + + {% else %} + + {% endif %} + {% endfor %} +{% endblock %} + +{% block body %} +
    +
    + {% block book_sidebar %} + {% block search_input %}{% endblock %} + {% block book_summary %} + + {% endblock %} + {% endblock %} +
    + +
    + {% block book_body %} +
    + {% block book_inner %} + {% include "website/header.html" %} + +
    +
    + {% block search_results %} +
    + {% block page %} + {{ page.content|safe }} + {% endblock %} +
    + {% endblock %} +
    +
    + =20 + {% include "website/footer.html" %} + {% endblock %} +
    + + {% block book_navigation %} + {% if page.previous and page.previous.path %} + + + + {% endif %} + {% if page.next and page.next.path %} + + + + {% endif %} + {% endblock %} + {% endblock %} +
    + + +
    +{% endblock %} diff --git a/_layouts/website/summary.html b/_layouts/website/summary.html new file mode 100644 index 0000000..e43c954 --- /dev/null +++ b/_layouts/website/summary.html @@ -0,0 +1,61 @@ +{% macro articles(_articles) %} + {% for article in _articles %} +
  • + {% if article.path and getPageByPath(article.path) %} + + {% elif article.url %} + + {% else %} + + {% endif %} + {% if article.level !=3D "0" and config.pluginsConfig[= 'theme-default'].showLevel %} + {{ article.level }}. + {% endif %} + {{ article.title }} + {% if article.path or article.url %} + + {% else %} + + {% endif %} + + {% if article.articles.length > 0 %} +
      + {{ articles(article.articles, file, config) }} +
    + {% endif %} +
  • + {% endfor %} +{% endmacro %} + +
      + {% set _divider =3D false %} + {% if config.links.sidebar %} + {% for linkTitle, link in config.links.sidebar %} + {% set _divider =3D true %} +
    • + {{ linkTitle }} +
    • + {% endfor %} + {% endif %} + + {% if _divider %} +
    • + {% endif %} + + {% for part in summary.parts %} + {% if part.title %} +
    • {{ part.title }}
    • + {% elif not loop.first %} +
    • + {% endif %} + {{ articles(part.articles, file, config) }} + {% endfor %} + +
    • + +
    • + + {{ "GITBOOK_LINK"|t }} + +
    • +
    diff --git a/styles/epub.css b/styles/epub.css index b9729f1..56f8394 100644 --- a/styles/epub.css +++ b/styles/epub.css @@ -1,235 +1,48 @@ -/* CSS for pdf */ - -body { - background: #f1f1f1; - border-top: 10px solid #999999; - font-size: 12pt; -} - -#mainbody { - margin-left: auto; - margin-right: auto; - width: 60em; -} - -#topbar { - top: 0; - left: 0; - bottom: 0; - width: 60em; - background: url("../images/header-bg.jpg") no-repeat; - border-top: 10px solid #ff6600; - margin-top: -10px; - float: left; -} - -#topbar.front-page { - height: 13em; -} - -#topbar #logo { - position: relative; - top: 85px; - left: 20px; -} - -#topbar #small-logo { - position: relative; - left: 20px; - padding: 0.1em 0 0.1em 0; - height: 3em; -} - -#sidebar { - float: left; - z-index: 1; - top: 0; - left: 0; - bottom: 0; - padding: 2em 0.5em 0 0.5em; - width: 9em; -} - -div.main-page.content { - float: left; - width: 35em; -} - -div.main-page.news { - float: right; - width: 20em; -} - -div.main-page.news h2 { - border-top: 10px solid #365f91; - border-bottom: 1px solid #333333; - color: #333333; - padding: 0.5em; - margin: 0; -} - -div.main-page.news ul { - margin: 0; - list-style: none; - list-style-image: none; -} - -div.main-page.news ul li { - border-bottom: 1px solid #333333; - padding: 0.5em; - color: #777777; -} - -div.main-page.news ul li a { - font-weight: bold; -} - -div.news-page.news-item { - border-top: 1px solid #777777; - width: 100%; - padding: 0; - margin: 0; -} - -#content { - margin: 0px; - padding: 2em 1em; - font-family: Helvetica; - color: #40494d; - background-color: #fff; - width: 100%; - max-width: 60em; - display: block; - float: left; -} - -#content #buttons a { - background: #ff6600; - color: #333333; - font-family: "Helvetica"; - text-transform: uppercase; - font-size: 15px; - display: inline-block; - padding: 8px 25px; - margin: 10px 20px 10px 0; -} - -#footer { - background: #999999; - margin-bottom: 60px; - width: 100%; - float: left; - padding: 0.5em 1em; -} -#footer #footer-inner { - height: 2em; - background: url("../images/footer-icon.svg") no-repeat right center; -} -#footer #footer-inner a { - color: white; - font-size: 14px; -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #footer #footer-inner { - padding: 10px 20px; - background-position: right 20px center; - } -} -@media (min-width: 64em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 3, "location": 2, "grid": 20px 630px 20px= 310px 20px, "gutter": 0.25, "style": "opposite", "start row": false, "end = row": false, "fixed gutter": true, "split gutter": false, "gutter property"= : "padding", "options": (("both": null))); - width: 96%; - float: left; - margin-right: -100%; - margin-left: 2%; - clear: none; - padding-right: 0.25; - } -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 1, "location": 1, "grid": 1, "gutter": 0.= 25, "style": "opposite", "start row": true, "end row": true, "fixed gutter"= : false, "split gutter": false, "gutter property": "margin", "options": ((n= ull: null))); - width: 100%; - float: right; - margin-left: 0; - margin-right: 0; - clear: none; - } -} - -ul { - font-family: sans-serif; - list-style-type: square; - padding: 0 0 0 0; - margin: 0.3em 0 0 1.5em; -} - -.site-menu { - color: #a0a0a0; -} - -a.site-menu:hover { - color: #4048c0; -} - -a { - color: #0860A8; - text-decoration: none; -} - -a:hover { - color: #0860A8; - text-decoration: underline; +p { + font-family: sans, sans-serif, Arial; } =20 -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; +body { + font-family: sans, sans-serif, Arial; } =20 h1 { color: #0860A8; - font-family: "Helvetica"; font-weight: normal; font-size: 190%; text-transform: uppercase; - margin-top: 0; - margin-bottom: 0; } =20 h2 { color: #0860A8; - font-family: "Helvetica"; font-size: 130% } =20 h3 { color: #0860A8; font-weight: bold; - font-size: 90% + font-size: 100% } =20 h4 { color: #0860A8; - font-weight: bold; font-size: 90% } =20 -.t_projects th { - background-color: #DBEBFF; +h5 { + color: #0860A8; + font-weight: bold; + font-size: 90%; } =20 -.t_projects table, th, td { - border: 1px solid #ccc; - font-size: 80%; +h6 { + font-weight: bold; + font-size: 90%; + text-align: center; } =20 -.section.toc { - display: none; +img { + max-width: 100%; + height: auto; } - -/* TODO: Consider css for - * - * .posts .site .header .title .meta .footer .contact .rss .post - */ -=20 \ No newline at end of file + =20 diff --git a/styles/mobi.css b/styles/mobi.css new file mode 100644 index 0000000..efa36c5 --- /dev/null +++ b/styles/mobi.css @@ -0,0 +1,50 @@ +p { + font-family: sans, sans-serif, Arial; +} + +body { + font-family: sans, sans-serif, Arial; +} + +h1 { + color: #0860A8; + font-weight: bold; + font-size: 170%; + text-transform: uppercase; +} + +h2 { + color: #0860A8; + font-weight: bold; + font-size: 160% +} + +h3 { + color: #0860A8; + font-weight: bold; + font-size: 150% +} + +h4 { + color: #0860A8; + font-weight: bold; + font-size: 140% +} + +h5 { + color: #0860A8; + font-weight: bold; + font-size: 130%; +} + +h6 { + font-weight: bold; + font-size: 100%; + text-align: center; +} + +img { + max-width: 100%; + height: auto; +} + =20 diff --git a/styles/pdf.css b/styles/pdf.css index 56f3448..56f8394 100644 --- a/styles/pdf.css +++ b/styles/pdf.css @@ -1,233 +1,48 @@ -/* CSS for pdf */ - -body { - background: #f1f1f1; - border-top: 10px solid #999999; - font-size: 12pt; -} - -#mainbody { - margin-left: auto; - margin-right: auto; - width: 60em; -} - -#topbar { - top: 0; - left: 0; - bottom: 0; - width: 60em; - background: url("../images/header-bg.jpg") no-repeat; - border-top: 10px solid #ff6600; - margin-top: -10px; - float: left; -} - -#topbar.front-page { - height: 13em; -} - -#topbar #logo { - position: relative; - top: 85px; - left: 20px; -} - -#topbar #small-logo { - position: relative; - left: 20px; - padding: 0.1em 0 0.1em 0; - height: 3em; -} - -#sidebar { - float: left; - z-index: 1; - top: 0; - left: 0; - bottom: 0; - padding: 2em 0.5em 0 0.5em; - width: 9em; -} - -div.main-page.content { - float: left; - width: 35em; -} - -div.main-page.news { - float: right; - width: 20em; -} - -div.main-page.news h2 { - border-top: 10px solid #365f91; - border-bottom: 1px solid #333333; - color: #333333; - padding: 0.5em; - margin: 0; -} - -div.main-page.news ul { - margin: 0; - list-style: none; - list-style-image: none; -} - -div.main-page.news ul li { - border-bottom: 1px solid #333333; - padding: 0.5em; - color: #777777; -} - -div.main-page.news ul li a { - font-weight: bold; -} - -div.news-page.news-item { - border-top: 1px solid #777777; - width: 100%; - padding: 0; - margin: 0; -} - -#content { - margin: 0px; - padding: 2em 1em; - font-family: Helvetica; - color: #40494d; - background-color: #fff; - width: 100%; - max-width: 60em; - display: block; - float: left; -} - -#content #buttons a { - background: #ff6600; - color: #333333; - font-family: "Helvetica"; - text-transform: uppercase; - font-size: 15px; - display: inline-block; - padding: 8px 25px; - margin: 10px 20px 10px 0; -} - -#footer { - background: #999999; - margin-bottom: 60px; - width: 100%; - float: left; - padding: 0.5em 1em; -} -#footer #footer-inner { - height: 2em; - background: url("../images/footer-icon.svg") no-repeat right center; -} -#footer #footer-inner a { - color: white; - font-size: 14px; -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #footer #footer-inner { - padding: 10px 20px; - background-position: right 20px center; - } -} -@media (min-width: 64em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 3, "location": 2, "grid": 20px 630px 20px= 310px 20px, "gutter": 0.25, "style": "opposite", "start row": false, "end = row": false, "fixed gutter": true, "split gutter": false, "gutter property"= : "padding", "options": (("both": null))); - width: 96%; - float: left; - margin-right: -100%; - margin-left: 2%; - clear: none; - padding-right: 0.25; - } -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 1, "location": 1, "grid": 1, "gutter": 0.= 25, "style": "opposite", "start row": true, "end row": true, "fixed gutter"= : false, "split gutter": false, "gutter property": "margin", "options": ((n= ull: null))); - width: 100%; - float: right; - margin-left: 0; - margin-right: 0; - clear: none; - } -} - -ul { - font-family: sans-serif; - list-style-type: square; - padding: 0 0 0 0; - margin: 0.3em 0 0 1.5em; -} - -.site-menu { - color: #a0a0a0; -} - -a.site-menu:hover { - color: #4048c0; -} - -a { - color: #0860A8; - text-decoration: none; -} - -a:hover { - color: #0860A8; - text-decoration: underline; +p { + font-family: sans, sans-serif, Arial; } =20 -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; +body { + font-family: sans, sans-serif, Arial; } =20 h1 { color: #0860A8; - font-family: "Helvetica"; font-weight: normal; font-size: 190%; text-transform: uppercase; - margin-top: 0; - margin-bottom: 0; } =20 h2 { color: #0860A8; - font-family: "Helvetica"; font-size: 130% } =20 h3 { color: #0860A8; font-weight: bold; - font-size: 90% + font-size: 100% } =20 h4 { color: #0860A8; - font-weight: bold; font-size: 90% } =20 - -.t_projects th { - background-color: #DBEBFF; +h5 { + color: #0860A8; + font-weight: bold; + font-size: 90%; } =20 -.t_projects table, th, td { - border: 1px solid #ccc; - font-size: 80%; +h6 { + font-weight: bold; + font-size: 90%; + text-align: center; } =20 - -/* TODO: Consider css for - * - * .posts .site .header .title .meta .footer .contact .rss .post - */ -=20 \ No newline at end of file +img { + max-width: 100%; + height: auto; +} + =20 diff --git a/styles/website.css b/styles/website.css index a0df36a..56f8394 100644 --- a/styles/website.css +++ b/styles/website.css @@ -1,233 +1,48 @@ -/* CSS for website */ -/* CSS for website */ - -body { - background: #f1f1f1; - border-top: 10px solid #999999; - font-size: 12pt; -} - -#mainbody { - margin-left: auto; - margin-right: auto; - width: 60em; -} - -#topbar { - top: 0; - left: 0; - bottom: 0; - width: 60em; - background: url("../images/header-bg.jpg") no-repeat; - border-top: 10px solid #ff6600; - margin-top: -10px; - float: left; -} - -#topbar.front-page { - height: 13em; -} - -#topbar #logo { - position: relative; - top: 85px; - left: 20px; -} - -#topbar #small-logo { - position: relative; - left: 20px; - padding: 0.1em 0 0.1em 0; - height: 3em; -} - -#sidebar { - float: left; - z-index: 1; - top: 0; - left: 0; - bottom: 0; - padding: 2em 0.5em 0 0.5em; - width: 9em; -} - -div.main-page.content { - float: left; - width: 35em; -} - -div.main-page.news { - float: right; - width: 20em; -} - -div.main-page.news h2 { - border-top: 10px solid #365f91; - border-bottom: 1px solid #333333; - color: #333333; - padding: 0.5em; - margin: 0; -} - -div.main-page.news ul { - margin: 0; - list-style: none; - list-style-image: none; -} - -div.main-page.news ul li { - border-bottom: 1px solid #333333; - padding: 0.5em; - color: #777777; -} - -div.main-page.news ul li a { - font-weight: bold; -} - -div.news-page.news-item { - border-top: 1px solid #777777; - width: 100%; - padding: 0; - margin: 0; -} - -#content { - margin: 0px; - padding: 2em 1em; - font-family: Helvetica; - color: #40494d; - background-color: #fff; - width: 100%; - max-width: 60em; - display: block; - float: left; -} - -#content #buttons a { - background: #ff6600; - color: #333333; - font-family: "Helvetica"; - text-transform: uppercase; - font-size: 15px; - display: inline-block; - padding: 8px 25px; - margin: 10px 20px 10px 0; -} - -#footer { - background: #999999; - margin-bottom: 60px; - width: 100%; - float: left; - padding: 0.5em 1em; -} -#footer #footer-inner { - height: 2em; - background: url("../images/footer-icon.svg") no-repeat right center; -} -#footer #footer-inner a { - color: white; - font-size: 14px; -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #footer #footer-inner { - padding: 10px 20px; - background-position: right 20px center; - } -} -@media (min-width: 64em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 3, "location": 2, "grid": 20px 630px 20px= 310px 20px, "gutter": 0.25, "style": "opposite", "start row": false, "end = row": false, "fixed gutter": true, "split gutter": false, "gutter property"= : "padding", "options": (("both": null))); - width: 96%; - float: left; - margin-right: -100%; - margin-left: 2%; - clear: none; - padding-right: 0.25; - } -} -@media (min-width: 0em) and (max-width: 63.9375em) { - #page-wrapper #page #footer-inner { - -sgs-span-settings: ("span": 1, "location": 1, "grid": 1, "gutter": 0.= 25, "style": "opposite", "start row": true, "end row": true, "fixed gutter"= : false, "split gutter": false, "gutter property": "margin", "options": ((n= ull: null))); - width: 100%; - float: right; - margin-left: 0; - margin-right: 0; - clear: none; - } -} - -ul { - font-family: sans-serif; - list-style-type: square; - padding: 0 0 0 0; - margin: 0.3em 0 0 1.5em; -} - -.site-menu { - color: #a0a0a0; -} - -a.site-menu:hover { - color: #4048c0; -} - -a { - color: #0860A8; - text-decoration: none; -} - -a:hover { - color: #0860A8; - text-decoration: underline; +p { + font-family: sans, sans-serif, Arial; } =20 -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; +body { + font-family: sans, sans-serif, Arial; } =20 h1 { color: #0860A8; - font-family: "Helvetica"; font-weight: normal; font-size: 190%; text-transform: uppercase; - margin-top: 0; - margin-bottom: 0; } =20 h2 { color: #0860A8; - font-family: "Helvetica"; font-size: 130% } =20 h3 { color: #0860A8; font-weight: bold; - font-size: 90% + font-size: 100% } + h4 { color: #0860A8; - font-weight: bold; font-size: 90% } =20 - -.t_projects th { - background-color: #DBEBFF; +h5 { + color: #0860A8; + font-weight: bold; + font-size: 90%; } =20 -.t_projects table, th, td { - border: 1px solid #ccc; - font-size: 80%; +h6 { + font-weight: bold; + font-size: 90%; + text-align: center; } =20 - -/* TODO: Consider css for - * - * .posts .site .header .title .meta .footer .contact .rss .post - */ -=20 +img { + max-width: 100%; + height: auto; +} + =20 --=20 2.29.2.windows.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 (#68729): https://edk2.groups.io/g/devel/message/68729 Mute This Topic: https://groups.io/mt/78887922/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-