mirror of
https://github.com/stefanberger/libtpms
synced 2026-08-09 23:10:05 +00:00
If s_ContextSlotMask was not set since the TPM 2 was not initialized by a call to TPM_Manufacture() or the state was not resumed, then initialize the s_ContextSlotMask to 0xffff. This situation can occur if a VM with an attached swtpm was started and the VM's firmware either doesn't support TPM or didn't get to initialize the vTPM. The following commands recreated the issue with a SeaBIOS-only VM that had no attached hard disk but an attached TPM 2: virsh start BIOS-only-VM ; virsh save BIOS-only-VM save.bin ; \ virsh restore save.bin Error: Failed to restore domain from save.bin error: internal error: qemu unexpectedly closed the monitor: \ 2022-01-04T19:26:18.835851Z qemu-system-x86_64: tpm-emulator: Setting the stateblob (type 2) failed with a TPM error 0x3 a parameter is bad 2022-01-04T19:26:18.835899Z qemu-system-x86_64: error while loading state for instance 0x0 of device 'tpm-emulator' 2022-01-04T19:26:18.835929Z qemu-system-x86_64: load of migration failed: Input/output error Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2035731 Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> |
||
|---|---|---|
| .github/ISSUE_TEMPLATE | ||
| debian | ||
| dist | ||
| include | ||
| m4 | ||
| man | ||
| src | ||
| tests | ||
| .gitignore | ||
| .travis.yml | ||
| autogen.sh | ||
| bootstrap.sh | ||
| CHANGES | ||
| configure.ac | ||
| CREDITS | ||
| DCO1.1.txt | ||
| INSTALL | ||
| libtpms.pc.in | ||
| LICENSE | ||
| Makefile.am | ||
| README | ||
What is libtpms?
----------------
Libtpms is a library that targets the integration of TPM functionality
into hypervisors, primarily into Qemu. Libtpms provides a very narrow
public API for this purpose so that integration is possible. Only the
minimum of necessary APIs are made publicly available.
It is assumed that the user of libtpms is familiar with the concepts
of the Trusted Platform Module (TPM). For the interaction with libtpms
it is necessary to know how to construct valid TPM commands and to
be able to parse their results. It is not within the scope of libtpms's
documentation to provide background on this. See the section on references
below.
What files does the libtpms package provide?
--------------------------------------------
The main libtpms package provides the following files:
/usr/lib64/libtpms.so.0
/usr/lib64/libtpms.so.0.5.1
/usr/share/doc/libtpms-0.5.1
/usr/share/doc/libtpms-0.5.1/CHANGES
/usr/share/doc/libtpms-0.5.1/LICENSE
/usr/share/doc/libtpms-0.5.1/README
Applications can link with -ltpms.
What files does the libtpms development package provide?
--------------------------------------------------------
The libtpms development package (libtpms-devel) provides the following
include files for applications to use:
tpm_error.h
tpm_library.h
tpm_memory.h
tpm_nvfilename.h
tpm_tis.h
tpm_types.h
These files contain the data structures, data types and API calls supported
by libtpms. It is recommended to not use any other API calls than those
provided in these include files.
All APIs are described in man pages. The man pages are part of the libtpms
development package as well:
TPMLIB_DecodeBlob
TPMLIB_GetTPMProperty
TPMLIB_GetVersion
TPMLIB_MainInit
TPMLIB_Process
TPMLIB_RegisterCallbacks
TPMLIB_Terminate
TPMLIB_VolatileAll_Store
TPM_Free
TPM_IO_Hash_Data
TPM_IO_Hash_End
TPM_IO_Hash_Start
TPM_IO_TpmEstablished_Get
TPM_Malloc
TPM_Realloc
How to contribute?
------------------
The mailing list for libtpms is libtpms@googlegroups.com.
For patch submissions, please use a Signed-off-by: <your email> to indicate
agreement to the DCO1.1.txt.
Fuzzing
-------
Initial fuzzing is possible with clang & libfuzzer.
You have to configure the project with --enable-fuzzer
(--enable-sanitizer can also help spot more issues). Then you can
build fuzz and run it with the testing corpus.
Fuzz testing is known to work with Fedora 28 or later. It requires that the
'clang' package is installed.
Ex:
$ ./configure --with-openssl --with-tpm2 --enable-sanitizers --enable-fuzzer \
CC=clang CXX=clang++
$ make && make -C tests fuzz
$ tests/run-fuzzer.sh
oss-fuzz builds with its own fuzzer flags, and set $LIB_FUZZING_ENGINE
to be linked with. The script run by oss-fuzz is tests/oss-fuzz.sh.
Maintainers
-----------
libtpms is currently being maintained by Stefan Berger <stefanb@us.ibm.com>.
References:
-----------
Documentation about the Trusted Platform Module (TPM) can be downloaded
from the Trusted Computing Group's website at
http://www.trustedcomputinggroup.org