[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V24 0/7] QEMU Trusted Platform Module (TPM) integrat
From: |
Stefan Berger |
Subject: |
[Qemu-devel] [PATCH V24 0/7] QEMU Trusted Platform Module (TPM) integration |
Date: |
Tue, 19 Feb 2013 13:47:08 -0500 |
From: root <address@hidden>
The following series of patches adds TPM (Trusted Platform Module) support
to QEMU. An emulator for the TIS (TPM Interface Spec) interface is
added that provides the basis for accessing a 'backend' implementing the actual
TPM functionality. The TIS emulator serves as a 'frontend' enabling for
example Linux's TPM TIS (tpm_tis) driver.
In this series I am posting a backend implementation that makes use of the
host's TPM through a passthrough driver, which on Linux is accessed
using /dev/tpm0.
v24:
- applies to checkout of 7d2a929fe (Feb. 19)
- addressed comments from Andreas Faerber on v23
- added filtering for QMP query-tpm-models/types to only show those
models and types that are active; each active model/type registers
v23:
- applies to checkout of 571f65ec2 (Feb. 14)
- addressed comments from Corey Bryant on v22
v22:
- applies to checkout of 571f65ec2 (Feb. 14)
- addressed comments from Corey Bryant and Eric Blake on v21
v21:
- applies to checkout of 70ef6a5b7 (Feb. 7)
- addressed comments from Corey Bryant and Luiz Capitulino on v20
- adapted code to new directory structure:
- split tpm.h into public part in include/tpm/tpm.h
and private part in tpm/tpm_int.h
- all TPM code is now in tpm/ directory
v20:
- applies to checkout of v1.3.0 (6d6c9f59, Dec. 3)
- addressed comments from Corey Bryant on v19
- introduced support for canceling commands
v19:
- applies to checkout of 8cc9b43 (Jun 4)
v18:
- applies to checkout of 563987d (May 1)
- removed some dead variable in 7/7
v17:
- applies to checkout of 6507470 (Apr 30)
- split up path and fd into two optional parameters
v16:
- applied to checkout of 42fe1c2 (Apr 27)
- followed Anthony's suggestions for v15
- changed qemu-options.hx and vl.c to not show anything TPM-related if
--enable-tpm-passthrough was not used on configure line
v15:
- applies to checkout of 8a22565 (Mar 27)
- replacing g_malloc's with g_new; no more checks for NULL after allocs
- introducing usage of bottom half in TIS frontend to deliver responses
- get rid of locks since global lock is held by all threads entering TIS
code
- cleanups
v14:
- applies to checkout of da5361c (Dec 12)
- implemented Anthony Liguori's suggestions
- dropping the version log on individual patches
v13:
- applies to checkout of 61a5872 (Dec 12)
- only allowing character devices as fd parameter
- fixing error path in tpm_tis_init
v12:
- applies to checkout of ebffe2a (Oct 11)
- added documentation for fd parameter
- nits
v11:
- applies to checkout of 46f3069 (Sep 28)
- some filing on the documentation
- small nits fixed
v10:
- applies to checkout of 1ce9ce6 (Sep 27)
- addressed Michael Tsirkin's comments on v9
v9:
- addressed Michael Tsirkin's and other reviewers' comments
- only posting Andreas Niederl's passthrough driver as the backend driver
v8:
- applies to checkout of f0fb8b7 (Aug 30)
- fixing compilation error pointed out by Andreas Niederl
- adding patch that allows to feed an initial state into the libtpms TPM
- following memory API changes (glib) where necessary
v7:
- applies to checkout of b9c6cbf (Aug 9)
- measuring the modules if multiboot is used
- coding style fixes
v6:
- applies to checkout of 75ef849 (July 2nd)
- some fixes and improvements to existing patches; see individual patches
- added a patch with a null driver responding to all TPM requests with
a response indicating failure; this backend has no dependencies and
can alwayy be built;
- added a patch to support the hashing of kernel, ramfs and command line
if those were passed to Qemu using -kernel, -initrd and -append
respectively. Measurements are taken, logged, and passed to SeaBIOS using
the firmware interface.
- libtpms revision 7 now requires 83kb of block storage due to having more
NVRAM space
v5:
- applies to checkout of 1fddfba1
- adding support for split command line using the -tpmdev ... -device ...
options while keeping the -tpm option
- support for querying the device models using -tpm model=?
- support for monitor 'info tpm'
- adding documentation of command line options for man page and web page
- increasing room for ACPI tables that qemu reserves to 128kb (from 64kb)
- adding (experimental) support for block migration
- adding (experimental) support for taking measurements when kernel,
initrd and kernel command line are directly passed to Qemu
v4:
- applies to checkout of d2d979c6
- more coding style fixes
- adding patch for supporting blob encryption (in addition to the existing
QCoW2-level encryption)
- this allows for graceful termination of a migration if the target
is detected to have a wrong key
- tested with big and little endian hosts
- main thread releases mutex while checking for work to do on behalf of
backend
- introducing file locking (fcntl) on the block layer for serializing access
to shared (QCoW2) files (used during migration)
v3:
- Building a null driver at patch 5/8 that responds to all requests
with an error response; subsequently this driver is transformed to the
libtpms-based driver for real TPM functionality
- Reworked the threading; dropped the patch for qemu_thread_join; the
main thread synchronizing with the TPM thread termination may need
to write data to the block storage while waiting for the thread to
terminate; did not previously show a problem but is safer
- A lot of testing based on recent git checkout 4b4a72e5 (4/10):
- migration of i686 VM from x86_64 host to i686 host to ppc64 host while
running tests inside the VM
- tests with S3 suspend/resume
- tests with snapshots
- multiple-hour tests with VM suspend/resume (using virsh save/restore)
while running a TPM test suite inside the VM
All tests passed; [not all of them were done on the ppc64 host]
v2:
- splitting some of the patches into smaller ones for easier review
- fixes in individual patches
Regards,
Stefan
Stefan Berger (7):
Support for TPM command line options
Add TPM (frontend) hardware interface (TPM TIS) to QEMU
Add a debug register
Build the TPM frontend code
Add a TPM Passthrough backend driver implementation
Add support for cancelling of a TPM command
Build TPM passthrough for i386 and x86_64 targets
Makefile.objs | 1 +
configure | 11 +
default-configs/i386-softmmu.mak | 2 +
default-configs/x86_64-softmmu.mak | 2 +
hmp-commands.hx | 2 +
hmp.c | 44 ++
hmp.h | 1 +
include/qemu/sockets.h | 1 +
include/tpm/tpm.h | 21 +
monitor.c | 8 +
qapi-schema.json | 104 +++++
qemu-char.c | 24 +
qemu-options.hx | 74 +++
qmp-commands.hx | 18 +
tpm/Makefile.objs | 6 +
tpm/tpm.c | 359 ++++++++++++++
tpm/tpm_backend.c | 58 +++
tpm/tpm_backend.h | 45 ++
tpm/tpm_int.h | 116 +++++
tpm/tpm_passthrough.c | 526 +++++++++++++++++++++
tpm/tpm_tis.c | 929 +++++++++++++++++++++++++++++++++++++
tpm/tpm_tis.h | 80 ++++
vl.c | 42 ++
23 files changed, 2474 insertions(+)
create mode 100644 include/tpm/tpm.h
create mode 100644 tpm/Makefile.objs
create mode 100644 tpm/tpm.c
create mode 100644 tpm/tpm_backend.c
create mode 100644 tpm/tpm_backend.h
create mode 100644 tpm/tpm_int.h
create mode 100644 tpm/tpm_passthrough.c
create mode 100644 tpm/tpm_tis.c
create mode 100644 tpm/tpm_tis.h
--
1.7.11.7
- [Qemu-devel] [PATCH V24 0/7] QEMU Trusted Platform Module (TPM) integration,
Stefan Berger <=
- [Qemu-devel] [PATCH V24 7/7] Build TPM passthrough for i386 and x86_64 targets, Stefan Berger, 2013/02/19
- [Qemu-devel] [PATCH V24 4/7] Build the TPM frontend code, Stefan Berger, 2013/02/19
- [Qemu-devel] [PATCH V24 6/7] Add support for cancelling of a TPM command, Stefan Berger, 2013/02/19
- [Qemu-devel] [PATCH V24 1/7] Support for TPM command line options, Stefan Berger, 2013/02/19
- [Qemu-devel] [PATCH V24 2/7] Add TPM (frontend) hardware interface (TPM TIS) to QEMU, Stefan Berger, 2013/02/19