From: jejb@linux.ibm.com
To: Brijesh Singh <brijesh.singh@amd.com>,
Laszlo Ersek <lersek@redhat.com>,
devel@edk2.groups.io
Cc: dovmurik@linux.vnet.ibm.com, Dov.Murik1@il.ibm.com,
ashish.kalra@amd.com, tobin@ibm.com, david.kaplan@amd.com,
jon.grimm@amd.com, thomas.lendacky@amd.com, frankeh@us.ibm.com,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [edk2-devel] [PATCH 3/4] OvmfPkg: create a SEV secret area in the AmdSev memfd
Date: Thu, 19 Nov 2020 22:29:40 -0800 [thread overview]
Message-ID: <4f54470da2553416f5ccd18564c02d204b6f068e.camel@linux.ibm.com> (raw)
In-Reply-To: <e53d8d1a-4b80-4703-40b6-a4a90f104cc6@amd.com>
On Thu, 2020-11-19 at 13:41 -0600, Brijesh Singh wrote:
> On 11/19/20 1:50 AM, Laszlo Ersek wrote:
> > On 11/18/20 21:23, James Bottomley wrote:
> > > On Mon, 2020-11-16 at 23:46 +0100, Laszlo Ersek wrote:
> > > > On 11/12/20 01:13, James Bottomley wrote:
> > > [... I made all the changes above this]
> > > > > diff --git a/OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm
> > > > > b/OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm
> > > > > index 980e0138e7..7d3214e55d 100644
> > > > > --- a/OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm
> > > > > +++ b/OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm
> > > > > @@ -35,6 +35,8 @@ ALIGN 16
> > > > > ; the build time RIP value. The GUID must always be 48
> > > > > bytes
> > > > > from the
> > > > > ; end of the firmware.
> > > > > ;
> > > > > +; 0xffffffc2 (-0x3e) - Base Location of the SEV Launch
> > > > > Secret
> > > > > +; 0xffffffc6 (-0x3a) - Size of SEV Launch Secret
> > > > > ; 0xffffffca (-0x36) - IP value
> > > > > ; 0xffffffcc (-0x34) - CS segment base [31:16]
> > > > > ; 0xffffffce (-0x32) - Size of the SEV-ES reset block
> > > > > @@ -51,6 +53,8 @@ ALIGN 16
> > > > > TIMES (32 - (sevEsResetBlockEnd - sevEsResetBlockStart)) DB
> > > > > 0
> > > > >
> > > > > sevEsResetBlockStart:
> > > > > + DD SEV_LAUNCH_SECRET_BASE
> > > > > + DD SEV_LAUNCH_SECRET_SIZE
> > > > > DD SEV_ES_AP_RESET_IP
> > > > > DW sevEsResetBlockEnd - sevEsResetBlockStart
> > > > > DB 0xDE, 0x71, 0xF7, 0x00, 0x7E, 0x1A, 0xCB, 0x4F
> > > > (5) I'd prefer if we could introduce a new GUID-ed structure
> > > > for these new fields. The logic in QEMU should be extended to
> > > > start scanning at 4GB-48 for GUIDS. If the GUID is not
> > > > recognized, then terminate scanning. Otherwise, act upon the
> > > > GUID-ed structure found there as necessary, and then determine
> > > > the next GUID *candidate* location by subtracting the last
> > > > recognized GUID-ed structure's "size" field.
> > > So for this one, we can do it either way. However, the current
> > > design of the sevEsRestBlock is (according to AMD) to allow the
> > > addition of SEV specific information. Each piece of information
> > > is a specific offset from the GUID and the length of the
> > > structure can only grow, so the ordering is fixed once the info
> > > is added and you can tell if the section contains what you're
> > > looking for is present if the length covers it.
> > >
> > > We can certainly move this to a fully GUID based system, which
> > > would allow us to have an unordered list rather than the strict
> > > definition the never decreasing length scheme allows, but if we
> > > do that, the length word above becomes redundant.
> > Well, GUIDed structs in UEFI/PI are sometimes permitted to grow
> > compatibily, and for that, either a revision field or a size field
> > is necessary / used. I kind of desire both here -- it makes sense
> > to extend (for example) the SEV-ES reset block with relevant
> > information, and to add other blocks of information (identified
> > with different GUIDs).
> >
> > Basically I wouldn't want to finalize the SEV-ES AP reset block
> > just yet, *but* I also think this new information does not beloing
> > in the SEV-ES *AP reset block*. The new info is related to SEV-ES
> > alright, but not to the AP reset block, in my opinion. If you read
> > the larger context (the docs) in the assembly source around
> > "sevEsResetBlockStart", the launch secret just doesn't seem to fit
> > that.
> >
> > > I don't have a huge preference for either mechanism ... they seem
> > > to work equally well, but everyone should agree before I replace
> > > the length based scheme. I agree we should all agree about it
> > > first.
> >
> > And, to reiterate, I'd like to keep both the length fields and the
> > GUID-ed identification. In other words, a GUID should not imply an
> > exact struct size, just a minimum struct size.
>
> I agree with the GUID based approach, it aligns well with the future
> needs. Looking forwardm we will need to reserve couple of pages
> (secret and cpuid) for the SNP. In my WIP patches I extended reset
> block to define a new GUID for those new fields.
>
> https://github.com/AMDESE/ovmf/commit/87d47319411763d91219b377da709efdb057e662#diff-0ca7ec2856c316694c87b519c95db3270e0cac798eb09745cce167aad7f2d46dR28
>
> And I am using this qemu patch to iterate through all the GUIDs and
> call the corresponding callbacks.
>
> https://github.com/AMDESE/qemu/commit/16a1266353d372cbb7c1998f27081fb8aa4d31e9
OK, if that's not yet upstream, I think we should do this properly:
that means having a guid and length that identifies the entire table
and then all the incorporated guids and lengths. That way we don't
have a double meaning for the reset block guid as both identifying the
start of the table and the reset vector data. Also it means we don't
need a zero guid to signal the end of the table. And also means the
reset block GUID doesn't have to always be present (if it got
deprecated for some reason).
However, the downside is that you'll have to pull out the table by this
new guid at 0xffffffd0 and its length and then iterate over the table
to find the reset block guid ... but that will make it very easy to add
the additional guids.
James
next prev parent reply other threads:[~2020-11-20 6:29 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-12 0:13 [PATCH 0/4] SEV Encrypted Boot for Ovmf James Bottomley
2020-11-12 0:13 ` [PATCH 1/4] OvmfPkg/Amdsev: Base commit to build encrypted boot specific OVMF James Bottomley
2020-11-16 19:11 ` [edk2-devel] " Laszlo Ersek
2020-11-16 20:00 ` James Bottomley
2020-11-12 0:13 ` [PATCH 2/4] OvmfPkg/AmdSev: add Grub Firmware Volume Package James Bottomley
2020-11-16 20:42 ` [edk2-devel] " Laszlo Ersek
2020-11-17 0:05 ` Laszlo Ersek
2020-11-18 23:00 ` James Bottomley
2020-11-19 7:59 ` Laszlo Ersek
2020-11-12 0:13 ` [PATCH 3/4] OvmfPkg: create a SEV secret area in the AmdSev memfd James Bottomley
2020-11-16 22:46 ` [edk2-devel] " Laszlo Ersek
2020-11-18 20:23 ` James Bottomley
2020-11-19 7:50 ` Laszlo Ersek
2020-11-19 19:41 ` Brijesh Singh
2020-11-20 6:29 ` jejb [this message]
2020-11-20 10:59 ` Laszlo Ersek
2020-11-18 20:39 ` Lendacky, Thomas
2020-11-19 7:51 ` Laszlo Ersek
2020-11-12 0:13 ` [PATCH 4/4] OvmfPkg/AmdSev: Expose the Sev Secret area using a configuration table James Bottomley
2020-11-17 0:12 ` [edk2-devel] " Laszlo Ersek
2020-11-12 16:21 ` [PATCH 0/4] SEV Encrypted Boot for Ovmf Ashish Kalra
2020-11-12 16:34 ` Dr. David Alan Gilbert
2020-11-12 17:07 ` James Bottomley
2020-11-12 17:22 ` Ashish Kalra
2020-11-12 17:32 ` Brijesh Singh
2020-11-12 19:38 ` Dr. David Alan Gilbert
2020-11-12 21:56 ` Brijesh Singh
2020-11-12 22:50 ` James Bottomley
2020-11-15 14:08 ` Brijesh Singh
2020-11-12 19:44 ` James Bottomley
2020-11-13 2:04 ` [edk2-devel] " James Bottomley
2020-11-13 22:41 ` Laszlo Ersek
2020-11-16 18:50 ` Laszlo Ersek
2020-11-16 18:56 ` Laszlo Ersek
2020-11-16 19:55 ` James Bottomley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4f54470da2553416f5ccd18564c02d204b6f068e.camel@linux.ibm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox