From: "Laszlo Ersek" <lersek@redhat.com>
To: jejb@linux.ibm.com, Brijesh Singh <brijesh.singh@amd.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: Fri, 20 Nov 2020 11:59:17 +0100 [thread overview]
Message-ID: <27f74a14-50d8-920c-6a95-00760123acc1@redhat.com> (raw)
In-Reply-To: <4f54470da2553416f5ccd18564c02d204b6f068e.camel@linux.ibm.com>
On 11/20/20 07:29, James Bottomley wrote:
> 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.
I agree with doing things properly.
Thanks
Laszlo
next prev parent reply other threads:[~2020-11-20 10:59 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
2020-11-20 10:59 ` Laszlo Ersek [this message]
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=27f74a14-50d8-920c-6a95-00760123acc1@redhat.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