ACK/Cmnt: [SRU][J][PULL] KVM: Secure Execution guest dump encryption with customer keys

Stefan Bader stefan.bader at canonical.com
Fri Sep 6 09:20:51 UTC 2024


On 30.08.24 11:34, frank.heimes at canonical.com wrote:
> BugLink: https://bugs.launchpad.net/bugs/1959940
> 
> [ Impact ]
> 
>   * Hypervisor-initiated dumps for Secure Execution
>     (aka confidential computing) guests are not helpful,
>     because memory and CPU state is encrypted by a
>     transient key only available to the Ultravisor (uv).
> 
>   * Workload owners can still configure kdump in order to obtain kernel
>     crash information, but there are situation where kdump doesn't work.
> 
>   * In such situations problem determination is severely impeded.
> 
>   * This patch set solves this by implementing dumps created in a way
>     that can only be decrypted by the owner of the guest image
>     and be used for problem determination.
> 
> [ Test Plan ]
> 
>   * The setup of a Secure Execution environment is not trivial
>     and requires a certain set of hardware (IBM z15 or higher)
>     with FC 115).
> 
>   * On top of the modification of qemu that are handled in this
>     LP bug, modifications of the Kernel (LP#1959940) and
>     the s390-tools (LP#1959965) are required on top.
> 
>   * So at least a modified kernel and qemu test builds are needed
>     or both should be in -proposed at the same time (which might
>     be difficult).
>     A modified s390-tools is not urgently needed, since for the
>     verification of the kernel and qemu part a newer version
>     can be used (but a modified s390-tools is also available in PPA).
> 
>   * A detailed description (using Ubuntu as example) on how to setup
>     secure execution is available here:
>     Introducing IBM Secure Execution for Linux, April 2024 update
>     https://www.ibm.com/docs/en/linuxonibm/pdf/lx24se04.pdf
> 
>   * And information on 'Working with dumps of KVM guests in
>     IBM Secure Execution mode' is available here:
>     https://www.ibm.com/docs/en/linux-on-systems\
>     ?topic=commands-zgetdump#czgetdump__se_dump_examples
> 
> [ Where problems could occur ]
> 
>   * Ultravisor (uv) return codes are introduced, which is
>     generally appreciated. Just the right return codes need to be set
>     (and reacted upon).
> 
>   * Protected virtual machine dumps are newly introduced on top of
>     dump of 'normal' KVM VMs.
>     Since code is shared, it could have an unforeseen impact.
> 
>   * The doc renaming could lead to confusion,
>     if people rely on old doc structure.
> 
>   * The new capability case (217) could cause issues,
>     for example is case of issues during initialization..
>   
>   * CPU dump functionality was added (mainly as new s390x specific code
>     under s390/kvm), but CPU dump is only one part,
>     if not working correctly, it may lead to partially useless dump data.
> 
>   * Configuration dump functionality was also added
>     (again mainly as new s390x specific code under s390/kvm),
>     similar to CPU dump.
>     And moving from dumping inside of a VM to dumping from outside
>     (due to potential failures if done inside), might lead to a more
>     complex flow (now involving the uv), hence could be more error prone.
> 
>   * Adding query dump information, requires user space buffers.
>     Here it's crucial that buffer size is big enough.
> 
>   * The newly added constants and structure definitions that are
>     needed for dump support could become problematic in case wrong
>     data types were used (applies to all header modifications).
> 
>   * IOCTL for PV information retrieval got introduced
>     (kvm_s390_handle_pv_info, kvm_s390_handle_pv).
>     There are potential side effect (see man ioctl),
>     hence all potential failure cases should be covered.
> 
>   * New dump feature requires to know how much memory is needed, but if
>     this call for this is incorrect, it could break the dump process.
> 
>   * uv_cb_header struct changed to offset representation,
>     but using wrong offsets will lead to a wrong struct,
>     dump issues and potential crashes.
> 
> [ Other Info ]
> 
>   * Since 22.04 is a popular LTS release, it is already in use by many
>     secure execution customers.
>     But in case of severe crashes or issues in the secure execution
>     (KVM) guests dumps cannot be used as of today.
> 
>   * This enables customers, IBM and Canonical to get support in case of
>     crashes/dumps on hardware that runs secure execution environments.
> 
> The following changes since commit 26e0f85b437d70d39acea1321f64dffe6608319d:
> 
>    UBUNTU: Upstream stable to v5.15.162 (2024-07-26 11:56:43 +0200)
> 
> are available in the Git repository at:
> 
>    https://git.launchpad.net/~fheimes/+git/lp1959940j/ 0d574dbec328ae55aea03cf010e4998b02dda47f
> 
> for you to fetch changes up to 0d574dbec328ae55aea03cf010e4998b02dda47f:
> 
>    Documentation/virt/kvm/api.rst: Explain rc/rrc delivery (2024-08-29 08:35:21 +0200)
> 
> ----------------------------------------------------------------
> Janosch Frank (12):
>        s390: uv: Add offset comments to UV query struct and fix naming
>        s390/uv: Add SE hdr query information
>        s390/uv: Add dump fields to query
>        KVM: s390: pv: Add query interface
>        KVM: s390: pv: Add dump support definitions
>        KVM: s390: pv: Add query dump information
>        KVM: s390: Add configuration dump functionality
>        KVM: s390: Add CPU dump functionality
>        KVM: s390: Add KVM_CAP_S390_PROTECTED_DUMP
>        Documentation: virt: Protected virtual machine dumps
>        Documentation/virt/kvm/api.rst: Add protvirt dump/info api descriptions
>        Documentation/virt/kvm/api.rst: Explain rc/rrc delivery
> 
> Paolo Bonzini (1):
>        Documentation: KVM: add separate directories for architecture-specific documentation
> 
>   Documentation/virt/kvm/api.rst                     | 161 +++++++++++-
>   Documentation/virt/kvm/index.rst                   |  26 +-
>   Documentation/virt/kvm/s390/index.rst              |  13 +
>   Documentation/virt/kvm/{ => s390}/s390-diag.rst    |   0
>   Documentation/virt/kvm/{ => s390}/s390-pv-boot.rst |   0
>   Documentation/virt/kvm/s390/s390-pv-dump.rst       |  64 +++++
>   Documentation/virt/kvm/{ => s390}/s390-pv.rst      |   0
>   .../virt/kvm/{ => x86}/amd-memory-encryption.rst   |   0
>   Documentation/virt/kvm/{ => x86}/cpuid.rst         |   0
>   Documentation/virt/kvm/{ => x86}/halt-polling.rst  |   0
>   Documentation/virt/kvm/{ => x86}/hypercalls.rst    |   0
>   Documentation/virt/kvm/x86/index.rst               |  18 ++
>   Documentation/virt/kvm/{ => x86}/mmu.rst           |   0
>   Documentation/virt/kvm/{ => x86}/msr.rst           |   0
>   Documentation/virt/kvm/{ => x86}/nested-vmx.rst    |   0
>   .../virt/kvm/{ => x86}/running-nested-guests.rst   |   0
>   Documentation/virt/kvm/{ => x86}/timekeeping.rst   |   0
>   arch/s390/boot/uv.c                                |   4 +
>   arch/s390/include/asm/kvm_host.h                   |   1 +
>   arch/s390/include/asm/uv.h                         |  77 ++++--
>   arch/s390/kernel/uv.c                              |  53 ++++
>   arch/s390/kvm/kvm-s390.c                           | 269 +++++++++++++++++++++
>   arch/s390/kvm/kvm-s390.h                           |   5 +
>   arch/s390/kvm/pv.c                                 | 198 +++++++++++++++
>   include/uapi/linux/kvm.h                           |  55 +++++
>   25 files changed, 906 insertions(+), 38 deletions(-)
>   create mode 100644 Documentation/virt/kvm/s390/index.rst
>   rename Documentation/virt/kvm/{ => s390}/s390-diag.rst (100%)
>   rename Documentation/virt/kvm/{ => s390}/s390-pv-boot.rst (100%)
>   create mode 100644 Documentation/virt/kvm/s390/s390-pv-dump.rst
>   rename Documentation/virt/kvm/{ => s390}/s390-pv.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/amd-memory-encryption.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/cpuid.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/halt-polling.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/hypercalls.rst (100%)
>   create mode 100644 Documentation/virt/kvm/x86/index.rst
>   rename Documentation/virt/kvm/{ => x86}/mmu.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/msr.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/nested-vmx.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/running-nested-guests.rst (100%)
>   rename Documentation/virt/kvm/{ => x86}/timekeeping.rst (100%)
> 

Changes affect only architectural code for which a detailed test plan 
exists.

Acked-by: Stefan Bader <stefan.bader at canonical.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xE8675DEECBEECEA3.asc
Type: application/pgp-keys
Size: 48643 bytes
Desc: OpenPGP public key
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20240906/27d86661/attachment-0001.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20240906/27d86661/attachment-0001.sig>


More information about the kernel-team mailing list