Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- docs/formatdomain-devices-tpm.rst | 94 ++++++++++++++++++++++++++++++ docs/formatdomain-devices.rst | 96 +------------------------------ docs/meson.build | 1 + 3 files changed, 96 insertions(+), 95 deletions(-) create mode 100644 docs/formatdomain-devices-tpm.rst diff --git a/docs/formatdomain-devices-tpm.rst b/docs/formatdomain-devices-tpm.rst new file mode 100644 index 0000000000..41a7c48ba5 --- /dev/null +++ b/docs/formatdomain-devices-tpm.rst @@ -0,0 +1,94 @@ +:anchor:`<a id="elementsTpm"/>` + +TPM device +~~~~~~~~~~ + +The TPM device enables a QEMU guest to have access to TPM functionality. The TPM +device may either be a TPM 1.2 or a TPM 2.0. + +The TPM passthrough device type provides access to the host's TPM for one QEMU +guest. No other software may be using the TPM device, typically /dev/tpm0, at +the time the QEMU guest is started. :since:`'passthrough' since 1.0.5` + +Example: usage of the TPM passthrough device + +:: + + ... + <devices> + <tpm model='tpm-tis'> + <backend type='passthrough'> + <device path='/dev/tpm0'/> + </backend> + </tpm> + </devices> + ... + +The emulator device type gives access to a TPM emulator providing TPM +functionality for each VM. QEMU talks to it over a Unix socket. With the +emulator device type each guest gets its own private TPM. :since:`'emulator' +since 4.5.0` The state of the TPM emulator can be encrypted by providing an +``encryption`` element. :since:`'encryption' since 5.6.0` + +Example: usage of the TPM Emulator + +:: + + ... + <devices> + <tpm model='tpm-tis'> + <backend type='emulator' version='2.0'> + <encryption secret='6dd3e4a5-1d76-44ce-961f-f119f5aad935'/> + </backend> + </tpm> + </devices> + ... + +``model`` + The ``model`` attribute specifies what device model QEMU provides to the + guest. If no model name is provided, ``tpm-tis`` will automatically be chosen + for non-PPC64 architectures. :since:`Since 4.4.0` , another available choice + is the ``tpm-crb``, which should only be used when the backend device is a + TPM 2.0. :since:`Since 6.1.0` , pSeries guests on PPC64 are supported and the + default is ``tpm-spapr``. :since:`Since 6.5.0` , a new model called + ``spapr-tpm-proxy`` was added for pSeries guests. This model only works with + the ``passthrough`` backend. It creates a TPM Proxy device that communicates + with an existing TPM Resource Manager in the host, for example + ``/dev/tpmrm0``, enabling the guest to run in secure virtual machine mode + with the help of an Ultravisor. Adding a TPM Proxy to a pSeries guest brings + no security benefits unless the guest is running on a PPC64 host that has an + Ultravisor and a TPM Resource Manager. Only one TPM Proxy device is allowed + per guest, but a TPM Proxy device can be added together with other TPM + devices. + +``backend`` + The ``backend`` element specifies the type of TPM device. The following types + are supported: + + ``passthrough`` + Use the host's TPM or TPM Resource Manager device. + + This backend type requires exclusive access to a TPM device on the host. + An example for such a device is /dev/tpm0. The fully qualified file name + is specified by path attribute of the ``source`` element. If no file name + is specified then /dev/tpm0 is automatically used. :since:`Since 6.5.0` , + when choosing the ``spapr-tpm-proxy`` model, the file name specified is + expected to be a TPM Resource Manager device, e.g. ``/dev/tpmrm0``. + + ``emulator`` + For this backend type the 'swtpm' TPM Emulator must be installed on the + host. Libvirt will automatically start an independent TPM emulator for + each QEMU guest requesting access to it. + +``version`` + The ``version`` attribute indicates the version of the TPM. By default a TPM + 1.2 is created. This attribute only works with the ``emulator`` backend. The + following versions are supported: + + - '1.2' : creates a TPM 1.2 + - '2.0' : creates a TPM 2.0 + +``encryption`` + The ``encryption`` element allows the state of a TPM emulator to be + encrypted. The ``secret`` must reference a secret object that holds the + passphrase from which the encryption key will be derived. diff --git a/docs/formatdomain-devices.rst b/docs/formatdomain-devices.rst index 1357a906b5..cf7cbc40fc 100644 --- a/docs/formatdomain-devices.rst +++ b/docs/formatdomain-devices.rst @@ -58,101 +58,7 @@ following characters: ``[a-zA-Z0-9_-]``. :since:`Since 3.9.0` .. include:: formatdomain-devices-watchdog.rst .. include:: formatdomain-devices-memballoon.rst .. include:: formatdomain-devices-rng.rst - -:anchor:`<a id="elementsTpm"/>` - -TPM device -~~~~~~~~~~ - -The TPM device enables a QEMU guest to have access to TPM functionality. The TPM -device may either be a TPM 1.2 or a TPM 2.0. - -The TPM passthrough device type provides access to the host's TPM for one QEMU -guest. No other software may be using the TPM device, typically /dev/tpm0, at -the time the QEMU guest is started. :since:`'passthrough' since 1.0.5` - -Example: usage of the TPM passthrough device - -:: - - ... - <devices> - <tpm model='tpm-tis'> - <backend type='passthrough'> - <device path='/dev/tpm0'/> - </backend> - </tpm> - </devices> - ... - -The emulator device type gives access to a TPM emulator providing TPM -functionality for each VM. QEMU talks to it over a Unix socket. With the -emulator device type each guest gets its own private TPM. :since:`'emulator' -since 4.5.0` The state of the TPM emulator can be encrypted by providing an -``encryption`` element. :since:`'encryption' since 5.6.0` - -Example: usage of the TPM Emulator - -:: - - ... - <devices> - <tpm model='tpm-tis'> - <backend type='emulator' version='2.0'> - <encryption secret='6dd3e4a5-1d76-44ce-961f-f119f5aad935'/> - </backend> - </tpm> - </devices> - ... - -``model`` - The ``model`` attribute specifies what device model QEMU provides to the - guest. If no model name is provided, ``tpm-tis`` will automatically be chosen - for non-PPC64 architectures. :since:`Since 4.4.0` , another available choice - is the ``tpm-crb``, which should only be used when the backend device is a - TPM 2.0. :since:`Since 6.1.0` , pSeries guests on PPC64 are supported and the - default is ``tpm-spapr``. :since:`Since 6.5.0` , a new model called - ``spapr-tpm-proxy`` was added for pSeries guests. This model only works with - the ``passthrough`` backend. It creates a TPM Proxy device that communicates - with an existing TPM Resource Manager in the host, for example - ``/dev/tpmrm0``, enabling the guest to run in secure virtual machine mode - with the help of an Ultravisor. Adding a TPM Proxy to a pSeries guest brings - no security benefits unless the guest is running on a PPC64 host that has an - Ultravisor and a TPM Resource Manager. Only one TPM Proxy device is allowed - per guest, but a TPM Proxy device can be added together with other TPM - devices. - -``backend`` - The ``backend`` element specifies the type of TPM device. The following types - are supported: - - ``passthrough`` - Use the host's TPM or TPM Resource Manager device. - - This backend type requires exclusive access to a TPM device on the host. - An example for such a device is /dev/tpm0. The fully qualified file name - is specified by path attribute of the ``source`` element. If no file name - is specified then /dev/tpm0 is automatically used. :since:`Since 6.5.0` , - when choosing the ``spapr-tpm-proxy`` model, the file name specified is - expected to be a TPM Resource Manager device, e.g. ``/dev/tpmrm0``. - - ``emulator`` - For this backend type the 'swtpm' TPM Emulator must be installed on the - host. Libvirt will automatically start an independent TPM emulator for - each QEMU guest requesting access to it. - -``version`` - The ``version`` attribute indicates the version of the TPM. By default a TPM - 1.2 is created. This attribute only works with the ``emulator`` backend. The - following versions are supported: - - - '1.2' : creates a TPM 1.2 - - '2.0' : creates a TPM 2.0 - -``encryption`` - The ``encryption`` element allows the state of a TPM emulator to be - encrypted. The ``secret`` must reference a secret object that holds the - passphrase from which the encryption key will be derived. +.. include:: formatdomain-devices-tpm.rst :anchor:`<a id="elementsNVRAM"/>` diff --git a/docs/meson.build b/docs/meson.build index 43268be995..d99a85422b 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -143,6 +143,7 @@ docs_rst_files = [ 'formatdomain-devices-watchdog.rst', 'formatdomain-devices-memballoon.rst', 'formatdomain-devices-rng.rst', + 'formatdomain-devices-tpm.rst', ] }, { 'name': 'hacking' }, -- 2.26.2