All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: Christian Borntraeger <borntraeger@de.ibm.com>,
	Janosch Frank <frankja@linux.vnet.ibm.com>
Cc: KVM <kvm@vger.kernel.org>, Cornelia Huck <cohuck@redhat.com>,
	David Hildenbrand <david@redhat.com>,
	Ulrich Weigand <Ulrich.Weigand@de.ibm.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	linux-s390 <linux-s390@vger.kernel.org>,
	Michael Mueller <mimu@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>
Subject: Re: [PATCH 35/35] DOCUMENTATION: Protected virtual machine introduction and IPL
Date: Tue, 11 Feb 2020 13:23:39 +0100	[thread overview]
Message-ID: <5d8050a6-c730-4325-2d46-2b5c9cdc8408@redhat.com> (raw)
In-Reply-To: <20200207113958.7320-36-borntraeger@de.ibm.com>

On 07/02/2020 12.39, Christian Borntraeger wrote:
> From: Janosch Frank <frankja@linux.ibm.com>
> 
> Add documentation about protected KVM guests and description of changes
> that are necessary to move a KVM VM into Protected Virtualization mode.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> [borntraeger@de.ibm.com: fixing and conversion to rst]
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
[...]
> diff --git a/Documentation/virt/kvm/s390-pv-boot.rst b/Documentation/virt/kvm/s390-pv-boot.rst
> new file mode 100644
> index 000000000000..47814e53369a
> --- /dev/null
> +++ b/Documentation/virt/kvm/s390-pv-boot.rst
> @@ -0,0 +1,79 @@
> +.. SPDX-License-Identifier: GPL-2.0
> +
> +======================================
> +s390 (IBM Z) Boot/IPL of Protected VMs
> +======================================
> +
> +Summary
> +-------
> +Protected Virtual Machines (PVM) are not accessible by I/O or the
> +hypervisor.  When the hypervisor wants to access the memory of PVMs
> +the memory needs to be made accessible. When doing so, the memory will
> +be encrypted.  See :doc:`s390-pv` for details.
> +
> +On IPL a small plaintext bootloader is started which provides
> +information about the encrypted components and necessary metadata to
> +KVM to decrypt the protected virtual machine.
> +
> +Based on this data, KVM will make the protected virtual machine known
> +to the Ultravisor(UV) and instruct it to secure the memory of the PVM,
> +decrypt the components and verify the data and address list hashes, to
> +ensure integrity. Afterwards KVM can run the PVM via the SIE
> +instruction which the UV will intercept and execute on KVM's behalf.
> +
> +The switch into PV mode lets us load encrypted guest executables and

Maybe rather: "After the switch into PV mode, the guest can load ..." ?

> +data via every available method (network, dasd, scsi, direct kernel,
> +...) without the need to change the boot process.
> +
> +
> +Diag308
> +-------
> +This diagnose instruction is the basis for VM IPL. The VM can set and
> +retrieve IPL information blocks, that specify the IPL method/devices
> +and request VM memory and subsystem resets, as well as IPLs.
> +
> +For PVs this concept has been extended with new subcodes:
> +
> +Subcode 8: Set an IPL Information Block of type 5 (information block
> +for PVMs)
> +Subcode 9: Store the saved block in guest memory
> +Subcode 10: Move into Protected Virtualization mode
> +
> +The new PV load-device-specific-parameters field specifies all data,

remove the comma?

> +that is necessary to move into PV mode.
> +
> +* PV Header origin
> +* PV Header length
> +* List of Components composed of
> +   * AES-XTS Tweak prefix
> +   * Origin
> +   * Size
> +
> +The PV header contains the keys and hashes, which the UV will use to
> +decrypt and verify the PV, as well as control flags and a start PSW.
> +
> +The components are for instance an encrypted kernel, kernel cmd and

s/kernel cmd/kernel parameters/ ?

> +initrd. The components are decrypted by the UV.
> +
> +All non-decrypted data of the guest before it switches to protected
> +virtualization mode are zero on first access of the PV.

Before it switches to protected virtualization mode, all non-decrypted
data of the guest are ... ?

> +
> +When running in protected mode some subcodes will result in exceptions
> +or return error codes.
> +
> +Subcodes 4 and 7 will result in specification exceptions as they would
> +not clear out the guest memory.
> +When removing a secure VM, the UV will clear all memory, so we can't
> +have non-clearing IPL subcodes.
> +
> +Subcodes 8, 9, 10 will result in specification exceptions.
> +Re-IPL into a protected mode is only possible via a detour into non
> +protected mode.
> +
> +Keys
> +----
> +Every CEC will have a unique public key to enable tooling to build
> +encrypted images.
> +See  `s390-tools <https://github.com/ibm-s390-tools/s390-tools/>`_
> +for the tooling.
> diff --git a/Documentation/virt/kvm/s390-pv.rst b/Documentation/virt/kvm/s390-pv.rst
> new file mode 100644
> index 000000000000..dbe9110dfd1e
> --- /dev/null
> +++ b/Documentation/virt/kvm/s390-pv.rst
> @@ -0,0 +1,116 @@
> +.. SPDX-License-Identifier: GPL-2.0
> +
> +=========================================
> +s390 (IBM Z) Ultravisor and Protected VMs
> +=========================================
> +
> +Summary
> +-------
> +Protected virtual machines (PVM) are KVM VMs, where KVM can't access
> +the VM's state like guest memory and guest registers anymore. Instead,
> +the PVMs are mostly managed by a new entity called Ultravisor
> +(UV). The UV provides an API that can be used by PVMs and KVM to
> +request management actions.
> +
> +Each guest starts in the non-protected mode and then may make a
> +request to transition into protected mode. On transition, KVM
> +registers the guest and its VCPUs with the Ultravisor and prepares
> +everything for running it.
> +
> +The Ultravisor will secure and decrypt the guest's boot memory
> +(i.e. kernel/initrd). It will safeguard state changes like VCPU
> +starts/stops and injected interrupts while the guest is running.
> +
> +As access to the guest's state, such as the SIE state description, is
> +normally needed to be able to run a VM, some changes have been made in
> +SIE behavior. A new format 4 state description has been introduced,

s/in SIE behavior/in the behavior of the SIE instruction/ ?

> +where some fields have different meanings for a PVM. SIE exits are
> +minimized as much as possible to improve speed and reduce exposed
> +guest state.
[...]

 Thomas

  reply	other threads:[~2020-02-11 12:23 UTC|newest]

Thread overview: 147+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-07 11:39 [PATCH 00/35] KVM: s390: Add support for protected VMs Christian Borntraeger
2020-02-07 11:39 ` [PATCH 01/35] mm:gup/writeback: add callbacks for inaccessible pages Christian Borntraeger
2020-02-10 17:27   ` Christian Borntraeger
2020-02-10 17:27     ` Christian Borntraeger
2020-02-11 11:26     ` Will Deacon
2020-02-11 11:43       ` Christian Borntraeger
2020-02-11 11:43         ` Christian Borntraeger
2020-02-13 14:48       ` Christian Borntraeger
2020-02-13 14:48         ` Christian Borntraeger
2020-02-18 16:02         ` Will Deacon
2020-02-13 19:56     ` Sean Christopherson
2020-02-13 19:56       ` Sean Christopherson
2020-02-13 20:13       ` Christian Borntraeger
2020-02-13 20:13         ` Christian Borntraeger
2020-02-13 20:46         ` Sean Christopherson
2020-02-13 20:46           ` Sean Christopherson
2020-02-17 20:55         ` Tom Lendacky
2020-02-17 20:55           ` Tom Lendacky
2020-02-17 21:14           ` Christian Borntraeger
2020-02-17 21:14             ` Christian Borntraeger
2020-02-10 18:17   ` David Hildenbrand
2020-02-10 18:28     ` Christian Borntraeger
2020-02-10 18:43       ` David Hildenbrand
2020-02-10 18:51         ` Christian Borntraeger
2020-02-18  3:36   ` Tian, Kevin
2020-02-18  6:44     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 02/35] KVM: s390/interrupt: do not pin adapter interrupt pages Christian Borntraeger
2020-02-10 12:26   ` David Hildenbrand
2020-02-10 18:38     ` Christian Borntraeger
2020-02-10 19:33       ` David Hildenbrand
2020-02-11  9:23         ` [PATCH v2 RFC] " Christian Borntraeger
2020-02-12 11:52           ` Christian Borntraeger
2020-02-12 12:16           ` David Hildenbrand
2020-02-12 12:22             ` Christian Borntraeger
2020-02-12 12:47               ` David Hildenbrand
2020-02-12 12:39           ` Cornelia Huck
2020-02-12 12:44             ` Christian Borntraeger
2020-02-12 13:07               ` Cornelia Huck
2020-02-10 18:56     ` [PATCH 02/35] KVM: s390/interrupt: do not pin adapter interrupt Ulrich Weigand
2020-02-10 18:56       ` Ulrich Weigand
2020-02-10 12:40   ` [PATCH 02/35] KVM: s390/interrupt: do not pin adapter interrupt pages David Hildenbrand
2020-02-07 11:39 ` [PATCH 03/35] s390/protvirt: introduce host side setup Christian Borntraeger
2020-02-10  9:42   ` Thomas Huth
2020-02-10  9:48     ` Christian Borntraeger
2020-02-10 11:54   ` Cornelia Huck
2020-02-10 12:14     ` Christian Borntraeger
2020-02-10 12:31       ` Cornelia Huck
2020-02-10 12:38   ` David Hildenbrand
2020-02-10 12:54     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 04/35] s390/protvirt: add ultravisor initialization Christian Borntraeger
2020-02-14 10:25   ` David Hildenbrand
2020-02-14 10:33     ` Christian Borntraeger
2020-02-14 10:34       ` David Hildenbrand
2020-02-07 11:39 ` [PATCH 05/35] s390/mm: provide memory management functions for protected KVM guests Christian Borntraeger
2020-02-12 13:42   ` Cornelia Huck
2020-02-13  7:43     ` Christian Borntraeger
2020-02-13  8:44       ` Cornelia Huck
2020-02-14 17:59   ` David Hildenbrand
2020-02-14 21:17     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 06/35] s390/mm: add (non)secure page access exceptions handlers Christian Borntraeger
2020-02-14 18:05   ` David Hildenbrand
2020-02-14 19:59     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 07/35] KVM: s390: add new variants of UV CALL Christian Borntraeger
2020-02-07 14:34   ` Thomas Huth
2020-02-07 15:03     ` Christian Borntraeger
2020-02-10 12:16   ` Cornelia Huck
2020-02-10 12:22     ` Christian Borntraeger
2020-02-14 18:28   ` David Hildenbrand
2020-02-14 20:13     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 08/35] KVM: s390: protvirt: Add initial lifecycle handling Christian Borntraeger
2020-02-07 16:32   ` Thomas Huth
2020-02-10  8:34     ` Christian Borntraeger
2020-02-08 14:54   ` Thomas Huth
2020-02-10 11:43     ` Christian Borntraeger
2020-02-10 11:45       ` [PATCH/RFC] KVM: s390: protvirt: pass-through rc and rrc Christian Borntraeger
2020-02-10 12:06         ` Christian Borntraeger
2020-02-10 12:29           ` Thomas Huth
2020-02-10 12:50           ` Cornelia Huck
2020-02-10 12:56             ` Christian Borntraeger
2020-02-11  8:48               ` Janosch Frank
2020-02-13  8:43                 ` Christian Borntraeger
2020-02-14 18:39   ` [PATCH 08/35] KVM: s390: protvirt: Add initial lifecycle handling David Hildenbrand
2020-02-14 21:22     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 09/35] KVM: s390: protvirt: Add KVM api documentation Christian Borntraeger
2020-02-08 14:57   ` Thomas Huth
2020-02-10 12:26     ` Christian Borntraeger
2020-02-10 12:57       ` Cornelia Huck
2020-02-10 13:02         ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 10/35] KVM: s390: protvirt: Secure memory is not mergeable Christian Borntraeger
2020-02-07 11:39 ` [PATCH 11/35] KVM: s390/mm: Make pages accessible before destroying the guest Christian Borntraeger
2020-02-14 18:40   ` David Hildenbrand
2020-02-07 11:39 ` [PATCH 12/35] KVM: s390: protvirt: Handle SE notification interceptions Christian Borntraeger
2020-02-07 11:39 ` [PATCH 13/35] KVM: s390: protvirt: Instruction emulation Christian Borntraeger
2020-02-07 11:39 ` [PATCH 14/35] KVM: s390: protvirt: Add interruption injection controls Christian Borntraeger
2020-02-07 11:39 ` [PATCH 15/35] KVM: s390: protvirt: Implement interruption injection Christian Borntraeger
2020-02-10 10:03   ` Thomas Huth
2020-02-07 11:39 ` [PATCH 16/35] KVM: s390: protvirt: Add SCLP interrupt handling Christian Borntraeger
2020-02-11 12:00   ` Thomas Huth
2020-02-11 20:06     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 17/35] KVM: s390: protvirt: Handle spec exception loops Christian Borntraeger
2020-02-07 11:39 ` [PATCH 18/35] KVM: s390: protvirt: Add new gprs location handling Christian Borntraeger
2020-02-07 11:39 ` [PATCH 19/35] KVM: S390: protvirt: Introduce instruction data area bounce buffer Christian Borntraeger
2020-02-07 11:39 ` [PATCH 20/35] KVM: s390: protvirt: handle secure guest prefix pages Christian Borntraeger
2020-02-13  8:37   ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 21/35] KVM: s390/mm: handle guest unpin events Christian Borntraeger
2020-02-10 14:58   ` Thomas Huth
2020-02-11 13:21     ` Cornelia Huck
2020-02-07 11:39 ` [PATCH 22/35] KVM: s390: protvirt: Write sthyi data to instruction data area Christian Borntraeger
2020-02-07 11:39 ` [PATCH 23/35] KVM: s390: protvirt: STSI handling Christian Borntraeger
2020-02-08 15:01   ` Thomas Huth
2020-02-11 10:55   ` Cornelia Huck
2020-02-07 11:39 ` [PATCH 24/35] KVM: s390: protvirt: disallow one_reg Christian Borntraeger
2020-02-10 17:53   ` Cornelia Huck
2020-02-10 18:34     ` Christian Borntraeger
2020-02-11  8:27       ` Cornelia Huck
2020-02-07 11:39 ` [PATCH 25/35] KVM: s390: protvirt: Only sync fmt4 registers Christian Borntraeger
2020-02-09 15:50   ` Thomas Huth
2020-02-10  9:33     ` Christian Borntraeger
2020-02-11 10:51   ` Cornelia Huck
2020-02-11 12:59     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 26/35] KVM: s390: protvirt: Add program exception injection Christian Borntraeger
2020-02-09 15:52   ` Thomas Huth
2020-02-07 11:39 ` [PATCH 27/35] KVM: s390: protvirt: Add diag 308 subcode 8 - 10 handling Christian Borntraeger
2020-02-07 11:39 ` [PATCH 28/35] KVM: s390: protvirt: UV calls diag308 0, 1 Christian Borntraeger
2020-02-09 16:03   ` Thomas Huth
2020-02-10  8:45     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 29/35] KVM: s390: protvirt: Report CPU state to Ultravisor Christian Borntraeger
2020-02-07 11:39 ` [PATCH 30/35] KVM: s390: protvirt: Support cmd 5 operation state Christian Borntraeger
2020-02-07 11:39 ` [PATCH 31/35] KVM: s390: protvirt: Add UV debug trace Christian Borntraeger
2020-02-10 13:22   ` Cornelia Huck
2020-02-10 13:40     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 32/35] KVM: s390: protvirt: Mask PSW interrupt bits for interception 104 and 112 Christian Borntraeger
2020-02-09 16:07   ` Thomas Huth
2020-02-10 13:28   ` Cornelia Huck
2020-02-10 13:48     ` Christian Borntraeger
2020-02-10 14:47       ` Cornelia Huck
2020-02-07 11:39 ` [PATCH 33/35] KVM: s390: protvirt: do not inject interrupts after start Christian Borntraeger
2020-02-07 11:39 ` [PATCH 34/35] KVM: s390: protvirt: Add UV cpu reset calls Christian Borntraeger
2020-02-10 13:17   ` Cornelia Huck
2020-02-10 13:25     ` Christian Borntraeger
2020-02-07 11:39 ` [PATCH 35/35] DOCUMENTATION: Protected virtual machine introduction and IPL Christian Borntraeger
2020-02-11 12:23   ` Thomas Huth [this message]
2020-02-11 20:03     ` Christian Borntraeger
2020-02-12 11:03       ` Cornelia Huck
2020-02-12 11:49         ` Christian Borntraeger
2020-02-12 11:01   ` Cornelia Huck
2020-02-12 16:36     ` Christian Borntraeger

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-all 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=5d8050a6-c730-4325-2d46-2b5c9cdc8408@redhat.com \
    --to=thuth@redhat.com \
    --cc=Ulrich.Weigand@de.ibm.com \
    --cc=aarcange@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=frankja@linux.vnet.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mimu@linux.ibm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.