Skip to content
Snippets Groups Projects
  • David Gibson's avatar
    6c8ebe30
    spapr: Add PEF based confidential guest support · 6c8ebe30
    David Gibson authored
    
    Some upcoming POWER machines have a system called PEF (Protected
    Execution Facility) which uses a small ultravisor to allow guests to
    run in a way that they can't be eavesdropped by the hypervisor.  The
    effect is roughly similar to AMD SEV, although the mechanisms are
    quite different.
    
    Most of the work of this is done between the guest, KVM and the
    ultravisor, with little need for involvement by qemu.  However qemu
    does need to tell KVM to allow secure VMs.
    
    Because the availability of secure mode is a guest visible difference
    which depends on having the right hardware and firmware, we don't
    enable this by default.  In order to run a secure guest you need to
    create a "pef-guest" object and set the confidential-guest-support
    property to point to it.
    
    Note that this just *allows* secure guests, the architecture of PEF is
    such that the guest still needs to talk to the ultravisor to enter
    secure mode.  Qemu has no direct way of knowing if the guest is in
    secure mode, and certainly can't know until well after machine
    creation time.
    
    To start a PEF-capable guest, use the command line options:
        -object pef-guest,id=pef0 -machine confidential-guest-support=pef0
    
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: default avatarGreg Kurz <groug@kaod.org>
    6c8ebe30
    History
    spapr: Add PEF based confidential guest support
    David Gibson authored
    
    Some upcoming POWER machines have a system called PEF (Protected
    Execution Facility) which uses a small ultravisor to allow guests to
    run in a way that they can't be eavesdropped by the hypervisor.  The
    effect is roughly similar to AMD SEV, although the mechanisms are
    quite different.
    
    Most of the work of this is done between the guest, KVM and the
    ultravisor, with little need for involvement by qemu.  However qemu
    does need to tell KVM to allow secure VMs.
    
    Because the availability of secure mode is a guest visible difference
    which depends on having the right hardware and firmware, we don't
    enable this by default.  In order to run a secure guest you need to
    create a "pef-guest" object and set the confidential-guest-support
    property to point to it.
    
    Note that this just *allows* secure guests, the architecture of PEF is
    such that the guest still needs to talk to the ultravisor to enter
    secure mode.  Qemu has no direct way of knowing if the guest is in
    secure mode, and certainly can't know until well after machine
    creation time.
    
    To start a PEF-capable guest, use the command line options:
        -object pef-guest,id=pef0 -machine confidential-guest-support=pef0
    
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: default avatarGreg Kurz <groug@kaod.org>
papr-pef.txt 1.03 KiB
POWER (PAPR) Protected Execution Facility (PEF)
===============================================

Protected Execution Facility (PEF), also known as Secure Guest support
is a feature found on IBM POWER9 and POWER10 processors.

If a suitable firmware including an Ultravisor is installed, it adds
an extra memory protection mode to the CPU.  The ultravisor manages a
pool of secure memory which cannot be accessed by the hypervisor.

When this feature is enabled in QEMU, a guest can use ultracalls to
enter "secure mode".  This transfers most of its memory to secure
memory, where it cannot be eavesdropped by a compromised hypervisor.

Launching
---------

To launch a guest which will be permitted to enter PEF secure mode:

# ${QEMU} \
    -object pef-guest,id=pef0 \
    -machine confidential-guest-support=pef0 \
    ...

Live Migration
----------------

Live migration is not yet implemented for PEF guests.  For
consistency, we currently prevent migration if the PEF feature is
enabled, whether or not the guest has actually entered secure mode.