From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4001:c06::241; helo=mail-io0-x241.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-io0-x241.google.com (mail-io0-x241.google.com [IPv6:2607:f8b0:4001:c06::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A9B68220D4BF1 for ; Thu, 16 Nov 2017 01:28:37 -0800 (PST) Received: by mail-io0-x241.google.com with SMTP id i38so4598222iod.2 for ; Thu, 16 Nov 2017 01:32:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=ks+e1TrFrxqZWHHm9WDZfW/7wiEHec0VoqnMMQ3W6pM=; b=QNJ64sQaD4phrwYC5GFLJAVCwuhK3zMZRA1/uL1nny/qrKQd2Mq/Md3EAl8ToZVI28 mm5P7fXJHzwasGoA9G9qyU6vzqrZHOhmPeapHw74ochXji1Zu1e0iH2lq8TNgXcN8h9g /Yz/HT54N1XxYNeywdy6KhwjOQdt4PespvPO0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=ks+e1TrFrxqZWHHm9WDZfW/7wiEHec0VoqnMMQ3W6pM=; b=lFsj1qDDkln+dCXqzlfjjf4edHCYUopUHJJhrVcYkp0wjiOWtZ9ZW+TNqzRdIpfKpj LZCn3gRvBWBYw5/f8IRnky8gmoxrMhqbjXOvE1GJBSOrfYqfil094/eR80ZzoyYqGatW ZV2XHmRn6izjKb7N0bpKhJFsRHoSwarw1VbYYYg1FfBNvkmgMUpCyklER+GHKzcEa72U 7Qbuwq8hXIS4nAsS+fSav768swj5C98m0vVRkni5GZ/Vr0jHMK0FJgpZsx6UClyRcjkP VXcrOxywERkhaf6N+moMSMQxCzbuJ+DM6yNcLgYHmYqMbPqXb8hTZ5X1H9+qJmg7D5em QzxQ== X-Gm-Message-State: AJaThX7OrReOqqS4fD6ozSqP+0jQ9Na8fQbykNDEyzZD4VI76EY78mMB /uuJqfN3/AvybNsnwV2c2TET2yEbE0bqH0DDcGy0Fw== X-Google-Smtp-Source: AGs4zMZaFsMOKqeoeQubnzSXto9EAHKApjQNti5l3SkXsrb7+S3dQvUdbTSkZVE/OQO20NO2N1ULdq5VcZB1siuCRCw= X-Received: by 10.107.82.6 with SMTP id g6mr955903iob.253.1510824766031; Thu, 16 Nov 2017 01:32:46 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.104.3 with HTTP; Thu, 16 Nov 2017 01:32:45 -0800 (PST) In-Reply-To: <20171115215703.16491-3-lersek@redhat.com> References: <20171115215703.16491-1-lersek@redhat.com> <20171115215703.16491-3-lersek@redhat.com> From: Ard Biesheuvel Date: Thu, 16 Nov 2017 09:32:45 +0000 Message-ID: To: Laszlo Ersek Cc: edk2-devel-01 , Jordan Justen Subject: Re: [PATCH v2 2/4] OvmfPkg/Sec/Ia32: seed the temporary RAM with PcdInitValueInTempStack X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Nov 2017 09:28:37 -0000 Content-Type: text/plain; charset="UTF-8" On 15 November 2017 at 21:57, Laszlo Ersek wrote: > This allows the PEI core to report the maximum temporary SEC/PEI stack > usage on the DEBUG_INFO level, in the PeiCheckAndSwitchStack() function > [MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c]: > > * Normal boot: > >> Temp Stack : BaseAddress=0x814000 Length=0x4000 >> Temp Heap : BaseAddress=0x810000 Length=0x4000 >> Total temporary memory: 32768 bytes. >> temporary memory stack ever used: 3664 bytes. <---- >> temporary memory heap used for HobList: 5904 bytes. >> temporary memory heap occupied by memory pages: 0 bytes. > > * S3 resume (with PEI decompression / SMM): > >> Temp Stack : BaseAddress=0x814000 Length=0x4000 >> Temp Heap : BaseAddress=0x810000 Length=0x4000 >> Total temporary memory: 32768 bytes. >> temporary memory stack ever used: 3428 bytes. <---- >> temporary memory heap used for HobList: 4816 bytes. >> temporary memory heap occupied by memory pages: 0 bytes. > > I unit-tested this change by transitorily adding an infinite loop right > after the "rep stosd", and dumping the guest's temp SEC/PEI RAM (32KB > currently) while the guest was stuck in the loop. The dump includes one > dword from before and after the temp SEC/PEI RAM: > >> $ virsh qemu-monitor-command GUEST_NAME --hmp 'xp /8194wx 0x80FFFC' >> >> 000000000080fffc: 0x00000000 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 >> 000000000081000c: 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 >> ... >> 0000000000817fec: 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 >> 0000000000817ffc: 0x5aa55aa5 0x00000000 > > Cc: Ard Biesheuvel > Cc: Jordan Justen > Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=747 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel > --- > > Notes: > v2: > - update comment on ES [Jordan] > - document the other segment registers too [Jordan] > - move seeding to top of routine [Jordan] > - hence, drop earlier EAX -> EBX renaming [Jordan] > - replace runtime right shift with compile-time division [Jordan] > - drop Ard's Reviewed-by > > OvmfPkg/Sec/SecMain.inf | 1 + > OvmfPkg/Sec/Ia32/SecEntry.nasm | 18 ++++++++++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/OvmfPkg/Sec/SecMain.inf b/OvmfPkg/Sec/SecMain.inf > index 711b59530907..6051cb3c6c4c 100644 > --- a/OvmfPkg/Sec/SecMain.inf > +++ b/OvmfPkg/Sec/SecMain.inf > @@ -71,6 +71,7 @@ [Pcd] > gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress > gUefiOvmfPkgTokenSpaceGuid.PcdGuidedExtractHandlerTableSize > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd > + gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack > > [FeaturePcd] > gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire > diff --git a/OvmfPkg/Sec/Ia32/SecEntry.nasm b/OvmfPkg/Sec/Ia32/SecEntry.nasm > index 7fee1c2b2e4f..03501969ebce 100644 > --- a/OvmfPkg/Sec/Ia32/SecEntry.nasm > +++ b/OvmfPkg/Sec/Ia32/SecEntry.nasm > @@ -29,12 +29,30 @@ extern ASM_PFX(SecCoreStartupWithStack) > ; @param[in] EAX Initial value of the EAX register (BIST: Built-in Self Test) > ; @param[in] DI 'BP': boot-strap processor, or 'AP': application processor > ; @param[in] EBP Pointer to the start of the Boot Firmware Volume > +; @param[in] DS Selector allowing flat access to all addresses > +; @param[in] ES Selector allowing flat access to all addresses > +; @param[in] FS Selector allowing flat access to all addresses > +; @param[in] GS Selector allowing flat access to all addresses > +; @param[in] SS Selector allowing flat access to all addresses > ; > ; @return None This routine does not return > ; > global ASM_PFX(_ModuleEntryPoint) > ASM_PFX(_ModuleEntryPoint): > > + ; > + ; Fill the temporary RAM with the initial stack value. > + ; The loop below will seed the heap as well, but that's harmless. > + ; > + mov eax, FixedPcdGet32 (PcdInitValueInTempStack) ; dword to store > + mov edi, FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) ; base address, > + ; relative to > + ; ES > + mov ecx, FixedPcdGet32 (PcdOvmfSecPeiTempRamSize) / 4 ; dword count > + cld ; store from base > + ; up > + rep stosd > + > ; > ; Load temporary RAM stack based on PCDs > ; > -- > 2.14.1.3.gb7cf6e02401b > >