Libtpms-based TPM emulator with socket, character device, and Linux CUSE interface.
Go to file
Marc-André Lureau 01e804ff0a SELinux: allow to map state file
Specify vtpm state to a file instead of dir:

<tpm model="tpm-crb">
  <backend type="emulator" version="2.0">
    <source type="file" path="/var/lib/libvirt/swtpm/mytest/mytpm2-00.permall"/>
  </backend>
</tpm>

$ virsh start avocado-vt-vm1
error: Failed to start domain 'avocado-vt-vm1'
error: internal error: Could not run '/usr/bin/swtpm_setup'. exitstatus: 1; Check error log '/var/log/swtpm/libvirt/qemu/avocado-vt-vm1-swtpm.log' for details.

$ cat /var/log/swtpm/libvirt/qemu/avocado-vt-vm1-swtpm.log
SWTPM_NVRAM_LinearFile_Mmap: Could not mmap file: Permission denied
/usr/bin/swtpm exit with status 256:

$ ausearch -m avc
----
time->Thu Dec 12 08:43:07 2024
type=PROCTITLE msg=audit(1734010987.020:1455): proctitle=2F7573722F62696E2F737774706D00736F636B6574002D2D7072696E742D737461746573002D2D74706D7374617465006261636B656E642D7572693D66696C653A2F2F2F7661722F6C69622F6C6962766972742F737774706D2F6D79746573742F6D7974706D322D30302E7065726D616C6C002D2D74706D32002D2D6C6F67
type=SYSCALL msg=audit(1734010987.020:1455): arch=c000003e syscall=9 success=no exit=-13 a0=0 a1=c0 a2=3 a3=1 items=0 ppid=22547 pid=22549 auid=4294967295 uid=59 gid=59 euid=59 suid=59 fsuid=59 egid=59 sgid=59 fsgid=59 tty=(none) ses=4294967295 comm="swtpm" exe="/usr/bin/swtpm" subj=system_u:system_r:swtpm_t:s0 key=(null)
type=AVC msg=audit(1734010987.020:1455): avc:  denied  { map } for
pid=22549 comm="swtpm"
path="/var/lib/libvirt/swtpm/mytest/mytpm2-00.permall" dev="dm-0"
ino=202744025 scontext=system_u:system_r:swtpm_t:s0
tcontext=system_u:object_r:virt_var_lib_t:s0 tclass=file permissive=0

Resolves: https://issues.redhat.com/browse/RHEL-70835

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-20 11:04:23 -05:00
.github ci: Consolidate linter into container run and remove simple test 2024-12-16 10:09:06 -05:00
debian debian/rpm: Adjust changelog for 0.10.0 release 2024-11-15 14:19:43 -05:00
include swtpm: Define a structure to return PTM_GET_CAPABILITY result 2024-10-11 17:34:36 -04:00
man man: Improve swtpm_setup --tpm option documentation 2024-12-10 11:06:38 -05:00
samples swtpm_setup: Add support for --profile-name option 2024-10-02 09:35:17 -04:00
src SELinux: allow to map state file 2025-01-20 11:04:23 -05:00
tests test: Exit IBM TSS2 test early if it does not support swtpm 2024-10-28 21:19:33 -04:00
.gitignore selinux: Redevelop SELinux policy for Fedora 40 (ditch old rules) 2024-05-27 20:06:17 -04:00
.travis.yml Travis: Downgrade to setuptools 59.6.0 to avoid error in 71.x 2024-12-02 15:24:57 -05:00
autogen.sh build-sys: Create m4 directory on older systems 2018-12-15 10:06:03 -05:00
CHANGES CHANGES: Add documentation for changes in 0.10.0 2024-11-15 14:19:43 -05:00
configure.ac build-sys: Bump up version to 0.11.0 at beginning of dev cycle 2024-12-02 15:24:57 -05:00
COPYING initial check-in 2014-12-05 11:16:03 -05:00
DCO1.1.txt Replace the CLA with the DCO, simply requiring a Signed-off-by: 2016-12-21 11:11:48 -05:00
docker-compose.yml ci: add testing via docker compose 2024-07-18 16:48:21 -04:00
Dockerfile Dockerfile: Fix casing of 'as' 2024-09-25 07:20:37 -04:00
INSTALL docs: Update INSTALL document 2021-07-21 09:04:24 -04:00
LICENSE swtpm: Replace the CUSE TPM with the new implementation 2015-12-07 15:01:57 -05:00
Makefile.am samples: swtpm-create-tpmca: Fix shellcheck issues and add to syntax-check target 2023-02-22 17:27:05 -05:00
README docu: Cut down the README to its minimum 2018-09-24 17:48:41 -04:00
run_tests tests: Run all tests again in run_test 2020-04-07 17:14:10 -04:00
swtpm.spec build-sys: Bump up version to 0.11.0 at beginning of dev cycle 2024-12-02 15:24:57 -05:00
swtpm.spec.in debian/rpm: Adjust changelog for 0.10.0 release 2024-11-15 14:19:43 -05:00
TODO Adding RHEL/Centos status info 2016-06-26 20:03:43 -04:00

SWTPM - Software TPM Emulator
      David Safford safford@us.ibm.com
      Stefan Berger stefanb@us.ibm.com

The SWTPM package provides TPM emulators with different front-end interfaces
to libtpms. TPM emulators provide socket interfaces (TCP/IP and Unix) and
the Linux CUSE interface for the creation of multiple native /dev/vtpm* devices.

The SWTPM package also provides several tools for using the TPM emulator,
creating certificates for a TPM, and simulating the manufacturing of
a TPM by creating a TPM's EK and platform certificates etc. Please read 
the READMEs in the individual tool's directory under src/.

Please consult the Wiki for information about swtpm:

   https://github.com/stefanberger/swtpm/wiki