From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.132.183.28; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5088021163DF9 for ; Tue, 9 Oct 2018 01:09:13 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EFD5D5F726; Tue, 9 Oct 2018 08:09:12 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-35.rdu2.redhat.com [10.10.120.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id A501F2B45F; Tue, 9 Oct 2018 08:09:11 +0000 (UTC) To: "Ni, Ruiyu" , "Dong, Eric" , "edk2-devel@lists.01.org" References: <20181009015118.13856-1-eric.dong@intel.com> <06befab9-cbd6-59ab-c85e-deab4002824c@Intel.com> From: Laszlo Ersek Message-ID: Date: Tue, 9 Oct 2018 10:09:10 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <06befab9-cbd6-59ab-c85e-deab4002824c@Intel.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 09 Oct 2018 08:09:13 +0000 (UTC) Subject: Re: [Patch] UefiCpuPkg/S3Resume2Pei: disable paging before creating new page table. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Oct 2018 08:09:14 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit On 10/09/18 04:15, Ni, Ruiyu wrote: > On 10/9/2018 10:05 AM, Dong, Eric wrote: >> Add BZ link for this issue: >> https://bugzilla.tianocore.org/show_bug.cgi?id=1232 >> >> Thanks, >> Eric >> >>> -----Original Message----- >>> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of >>> Eric Dong >>> Sent: Tuesday, October 9, 2018 9:51 AM >>> To: edk2-devel@lists.01.org >>> Cc: Ni, Ruiyu ; Laszlo Ersek >>> Subject: [edk2] [Patch] UefiCpuPkg/S3Resume2Pei: disable paging before >>> creating new page table. >>> >>> PEI Stack Guard needs to enable paging. This might cause #GP in the >>> transition from 32-bit PEI to 64-bit SMM due to the code trying to >>> write CR3 >>> register with PML4 page table while the processor is enabled with PAE >>> paging. >>> >>> Simply disabling paging before updating CR3 can solve this conflict. >>> >>> Change-Id: I99bfdba5daa48a95a4c4ef97eeca1af086558957 >>> Cc: Ruiyu Ni >>> Cc: Laszlo Ersek >>> Cc: Jian J Wang >>> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off- >>> by:Eric Dong >>> Signed-off-by: Eric Dong >>> --- >>>   UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c       | 7 +++++++ >>>   UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf | 1 + >>>   2 files changed, 8 insertions(+) >>> >>> diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c >>> b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c >>> index f164c1713b..b3bf56e13d 100644 >>> --- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c >>> +++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c >>> @@ -1105,6 +1105,13 @@ S3RestoreConfig2 ( >>>         // >>>         SetInterruptState (InterruptStatus); >>> >>> +      if (PcdGetBool (PcdCpuStackGuard)) { >>> +        // >>> +        // Paging already been enabled, to avoid conflict >>> configuration, >>> +        // disable paging first anyway. >>> +        // >>> +        AsmWriteCr0 (AsmReadCr0 () & (~BIT31)); >>> +      } > > Two comments: > 1. We'd better not map the PcdCpuStackGuard to paging-enable. Maybe some > other feature also enables the paging in PEI phase but the > PcdCpuStackGuard is FALSE. I think I agree. > 2. When PEI is in 64bit mode, disabling paging may not work because > paging-enable is a must in 64bit mode. I think this case is academic. S3Resume2Pei does not support 64-bit PEI with SMM enabled. This is why we have commit 5133d1f1d297 ("OvmfPkg: replace README fine print about X64 SMM S3 with PlatformPei check", 2015-11-30) in OVMF. Anyway, I'm making this comment in the general sense only. I'm not suggesting that we disable paging unconditionally. Actually, I believe, I will suggest (under the v3 posting) restricting the write to CR0 even more. Thanks! Laszlo > >>>         AsmWriteCr3 ((UINTN)SmmS3ResumeState->SmmS3Cr3); >>> >>>         // >>> diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf >>> b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf >>> index 6ce1bf944c..0f131d19df 100644 >>> --- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf >>> +++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf >>> @@ -90,6 +90,7 @@ >>>   [Pcd] >>>     gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable  ## >>> SOMETIMES_CONSUMES >>> >>> gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrM >>> ask    ## CONSUMES >>> +  >>> gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard                       ## >>> CONSUMES >>> >>>   [Depex] >>>     TRUE >>> -- >>> 2.15.0.windows.1 >>> >>> _______________________________________________ >>> edk2-devel mailing list >>> edk2-devel@lists.01.org >>> https://lists.01.org/mailman/listinfo/edk2-devel > >