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:c0b::241; helo=mail-it0-x241.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-it0-x241.google.com (mail-it0-x241.google.com [IPv6:2607:f8b0:4001:c0b::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 D1413220D4BF1 for ; Thu, 16 Nov 2017 01:29:03 -0800 (PST) Received: by mail-it0-x241.google.com with SMTP id l196so5131101itl.4 for ; Thu, 16 Nov 2017 01:33:13 -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=eVLLz8GjqZF+aM+9/o/gq0Hy5I+/0QACAX6UVYDPhAs=; b=BI2U87usORiM8D9yjiKXpIEvipHKsfxsP/WDWST2ZvdrpJ4E6FQ8zwqvMCFK4gLd/N GPXrYBa4qeWotbH7/3Kf1tL0ZWbaYGc9EmeBwTqXVxiYEyDGwBrcnXY9in0SkaJ/mxAy LjJBTG0niSAk4J9kavJoc0lswbMjvaup48a/4= 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=eVLLz8GjqZF+aM+9/o/gq0Hy5I+/0QACAX6UVYDPhAs=; b=nRtNqJCuuXd8RyA3/s+nciNI/1PWQexfWrwVHgvIehNDotKS9H0j9lWeYKTuE5W2xC lo+SE/Jxr32uWsb8GXJcERcCqy2YO869kkWm88vYSwQakdCnDiheNejMQCC9GXtkVElz JRBxM7UbPVJ3TSos2tBSZqms6nutX0Xj/T50K7OzDp97b2WKWf1otLsOMgZ/DFdDdOGH mwJPTtjRVdeuAtQTvVT+bT4J0A6zv2wHxbbP/uceEsDYYAwgTzfOA0banqd9/PDptYBF B69X8iw80RI7qW36OMndRmabTEp1r1rmaz1s7+9aQ6gfYWMvTg13PQfyOtsITolz3R6d FsbQ== X-Gm-Message-State: AJaThX5uNFiVzVbsyPYRtzciZFdLN+MJQ58d3vtuaT2QEtWlxgeBLmf9 UMNf5ahxFeLrmmd09KEJ+9rUU8uuT3f9UxIdScUaAmMI7tA= X-Google-Smtp-Source: AGs4zMY8ycXWwLfe+3SIObrhROnlWExHoR502HqYe987Uw+1pVmm9XaORT+rxb1jpWWBY9yN7LFodMV1IfTD22V+aPE= X-Received: by 10.36.145.203 with SMTP id i194mr1529897ite.73.1510824792656; Thu, 16 Nov 2017 01:33:12 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.104.3 with HTTP; Thu, 16 Nov 2017 01:33:12 -0800 (PST) In-Reply-To: <20171115215703.16491-4-lersek@redhat.com> References: <20171115215703.16491-1-lersek@redhat.com> <20171115215703.16491-4-lersek@redhat.com> From: Ard Biesheuvel Date: Thu, 16 Nov 2017 09:33:12 +0000 Message-ID: To: Laszlo Ersek Cc: edk2-devel-01 , Jordan Justen Subject: Re: [PATCH v2 3/4] OvmfPkg/Sec/X64: 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:29:04 -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: 5080 bytes. <---- >> temporary memory heap used for HobList: 8080 bytes. >> temporary memory heap occupied by memory pages: 0 bytes. > > * S3 resume (no SMM / PEI decompression) > >> Temp Stack : BaseAddress=0x814000 Length=0x4000 >> Temp Heap : BaseAddress=0x810000 Length=0x4000 >> Total temporary memory: 32768 bytes. >> temporary memory stack ever used: 5048 bytes. <---- >> temporary memory heap used for HobList: 7112 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 stosq", 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, for consistency with the IA32 version > - replace runtime right shift with compile-time division [Jordan] > - compose qword-to-write at compile-time, not at runtime > - drop Ard's Reviewed-by > > OvmfPkg/Sec/X64/SecEntry.nasm | 21 ++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/OvmfPkg/Sec/X64/SecEntry.nasm b/OvmfPkg/Sec/X64/SecEntry.nasm > index f40427aa8e04..7c55032ac962 100644 > --- a/OvmfPkg/Sec/X64/SecEntry.nasm > +++ b/OvmfPkg/Sec/X64/SecEntry.nasm > @@ -30,12 +30,33 @@ extern ASM_PFX(SecCoreStartupWithStack) > ; @param[in] RAX Initial value of the EAX register (BIST: Built-in Self Test) > ; @param[in] DI 'BP': boot-strap processor, or 'AP': application processor > ; @param[in] RBP 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 rax, (FixedPcdGet32 ( \ > + PcdInitValueInTempStack \ > + ) << 32) | \ > + FixedPcdGet32 (PcdInitValueInTempStack) ; qword to store > + mov rdi, FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) ; base address, > + ; relative to > + ; ES > + mov rcx, FixedPcdGet32 (PcdOvmfSecPeiTempRamSize) / 8 ; qword count > + cld ; store from base > + ; up > + rep stosq > + > ; > ; Load temporary RAM stack based on PCDs > ; > -- > 2.14.1.3.gb7cf6e02401b > >