On Mon, Aug 28, 2023 at 02:10:42PM -0700, Derek Lee wrote:
When SEV is enabled in domcapabilities does that just mean any of
SEV,
SEV-ES, SEV-SNP is possible on the hardware?
No, <sev supported='yes'> only means that the CPU has 'sev' in the
flags. On
its own it doesn't say anything about the ES/SNP features. It might be possible
to extract information whether these have been enabled on the HW via BIOS (or
if they're enabled by default on new platforms) via the base64 encoded ID in
the <cpu0Id> XML subelement, but that's just my guess.
Similarly, does enabling SEV as a launchSecurity option in a domainXML mean
that whichever SEV is available will be enabled? And if the guest policy
has the ES flag set, it will not be created unless ES is enabled?
Again, ES/SNP are just extra useful security features which sit on top of SEV
(i.e. there's no such thing as "whichever" SEV), both serving a different
purpose and both supposed to be transparent to the user, IOW if they're enabled
on the HW they'll be used.
Whether a VM is created if you explicitly request the ES flag via the guest
policy on a non-ES enabled SEV CPU is totally dependent on AMD's FW behaviour
as libvirt only passes through the values. Based on the SEV API spec, if you
set ES in the guest policy SEV-ES must be enabled on the HW with no further
information provided, so my assumption is that the FW will refuse to comply
with such a request which in turn will result in QEMU returning a failure on
creating such a VM. Again, totally based on my assumption it would be a design
flaw of such a security feature if you requested the vCPU states to be included
in the measurement with the ES policy flag and the FW would silently ignore the
fact it's not enabled in HW and simply not include the data in the response.
Regards,
Erik