]> git.proxmox.com Git - swtpm.git/log
swtpm.git
4 years agoRPM: Update gitcommit for a useful 0.3.0 checkout
Stefan Berger [Mon, 17 Feb 2020 17:13:25 +0000 (12:13 -0500)]
RPM: Update gitcommit for a useful 0.3.0 checkout

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoTravis: Run make check with VERBOSE=1
Stefan Berger [Mon, 17 Feb 2020 17:05:14 +0000 (12:05 -0500)]
Travis: Run make check with VERBOSE=1

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoDebian: Adjust changelog for 0.3.0 release
Stefan Berger [Fri, 14 Feb 2020 13:22:48 +0000 (08:22 -0500)]
Debian: Adjust changelog for 0.3.0 release

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoDebian: Remove CUSE TPM from build and adjust rules file
Stefan Berger [Fri, 14 Feb 2020 13:25:11 +0000 (08:25 -0500)]
Debian: Remove CUSE TPM from build and adjust rules file

Remove the CUSE TPM from the build and adjust the rules file
so that the build works on Ubuntu servers for example.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoRPM: Adjust changelog for 0.3.0 release
Stefan Berger [Sun, 16 Feb 2020 19:37:50 +0000 (14:37 -0500)]
RPM: Adjust changelog for 0.3.0 release

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agobuild-sys: Set version to 0.3.0 for next release
Stefan Berger [Fri, 14 Feb 2020 18:06:14 +0000 (13:06 -0500)]
build-sys: Set version to 0.3.0 for next release

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoCHANGES: Add documentation for changes in 0.3.0
Stefan Berger [Fri, 14 Feb 2020 13:18:47 +0000 (08:18 -0500)]
CHANGES: Add documentation for changes in 0.3.0

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm: Only call memcpy if tocopy != 0 (coverity)
Stefan Berger [Fri, 14 Feb 2020 14:22:10 +0000 (09:22 -0500)]
swtpm: Only call memcpy if tocopy != 0 (coverity)

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Skip swtpm_cert --print-capabilities test if not compiled
Stefan Berger [Fri, 14 Feb 2020 00:59:38 +0000 (19:59 -0500)]
tests: Skip swtpm_cert --print-capabilities test if not compiled

If swtpm_cert is not compiled, do not attempt the --print-capabilities
test.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Adjust tests to use new startup options
Stefan Berger [Fri, 7 Feb 2020 15:32:04 +0000 (10:32 -0500)]
tests: Adjust tests to use new startup options

Adjust the vtpm proxy test case and others to make use of the new
startup options. Make sure that subsequent Startups sent to the
TPM fail with the expected error code.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoman: Document new startup options and capabilities advertisement
Stefan Berger [Fri, 7 Feb 2020 15:26:49 +0000 (10:26 -0500)]
man: Document new startup options and capabilities advertisement

Add documentation about the new startup options support as well
as the new capability and its meaning.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm: Enable sending startup commands before processing commands
Stefan Berger [Fri, 7 Feb 2020 15:19:33 +0000 (10:19 -0500)]
swtpm: Enable sending startup commands before processing commands

The vtpm proxy device requires that the TPM be 'Startup' otherwise it
fails sending the first command to it and will send the 'Startup'
(SU_CLEAR/TPM_ST_CLEAR) itself while adding a log entry. We want to
avoid the kernel log entry.

Add options to the existing --flags option that allows one to start
up the TPM 1.2 or TPM 2.0 with the startup types 'clear', 'state'
and 'deactivate' (TPM 1.2 only). Extend the --print-capabilities to
advertise the availability of these options with the string
'flags-opt-startup'.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Wait longer for port to close when running with valgrind
Stefan Berger [Wed, 5 Feb 2020 00:26:45 +0000 (19:26 -0500)]
tests: Wait longer for port to close when running with valgrind

Give swtpm more time to close the port. This became an issue when running
the tests and all executables are valgrind'ed.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Display SWTPM_CERT that's being used during test
Stefan Berger [Sun, 26 Jan 2020 14:40:49 +0000 (09:40 -0500)]
tests: Display SWTPM_CERT that's being used during test

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_cert: Accept serial numbers that use up to 64bits
Stefan Berger [Sun, 26 Jan 2020 05:14:09 +0000 (00:14 -0500)]
swtpm_cert: Accept serial numbers that use up to 64bits

Accept serial number that use up to 64bits.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_cert: Use getopt_long_only to parse options
Stefan Berger [Sun, 26 Jan 2020 04:56:42 +0000 (23:56 -0500)]
swtpm_cert: Use getopt_long_only to parse options

Convert the code to use getopt_long_only for parsing the options.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_cert: Add support for --print-capabilities option
Stefan Berger [Mon, 27 Jan 2020 18:45:39 +0000 (13:45 -0500)]
swtpm_cert: Add support for --print-capabilities option

Add support for the --print-capabilities option to display newly
added capabilities. Adpat the man page and related test case.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agosamples: Use new pwd format option for secretly passing passwords
Stefan Berger [Sun, 26 Jan 2020 03:38:50 +0000 (22:38 -0500)]
samples: Use new pwd format option for secretly passing passwords

Use the swtpm_cert --signkey-pwd and --parentkey-pwd to pass key passwords
using files rather than using the command line options.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_cert: Allow passing signing key and parent key via new option
Stefan Berger [Sun, 26 Jan 2020 03:31:08 +0000 (22:31 -0500)]
swtpm_cert: Allow passing signing key and parent key via new option

Allow passing signing key and parent key via files and file descriptors
and environment variables. Adapt a test case to exercise this new
functionality.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agosamples: Protect variables in swtpm-create-tpmca
Stefan Berger [Fri, 24 Jan 2020 20:49:51 +0000 (15:49 -0500)]
samples: Protect variables in swtpm-create-tpmca

Address several issues reported by shellcheck and protect
variables with quotes so we now can have filenames with spaces.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_setup: Enable spaces in paths and other variables
Stefan Berger [Fri, 24 Jan 2020 14:12:33 +0000 (09:12 -0500)]
swtpm_setup: Enable spaces in paths and other variables

This patch addresses several issues found with shellcheck. In particular
it now enables variables with spaces in them, such as file paths that
contain spaces.

Adjust one of the accompanying test cases to use spaces in the path.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agosamples: Protect variables with quotes and address shellcheck issues
Stefan Berger [Fri, 24 Jan 2020 14:11:33 +0000 (09:11 -0500)]
samples: Protect variables with quotes and address shellcheck issues

Protect variables with quotes so that pathnames with spaces are now
supported.

Adjust the accompanying test case to make use of spaces in file paths.

Address several issues found by shellcheck. Some of them are false
positives especially when it comes to protecting variables passed
to a commaned in an 'eval' line. They must not be protected, otherwise
they are not passed correctly.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_ioctl: Calculate strlen(input) only once
Stefan Berger [Tue, 21 Jan 2020 21:38:44 +0000 (16:38 -0500)]
swtpm_ioctl: Calculate strlen(input) only once

Calculate the strlen(input) only once at the beginning.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_ioctl: Block SIGPIPE so we can get EPIPE on write()
Stefan Berger [Tue, 21 Jan 2020 21:35:53 +0000 (16:35 -0500)]
swtpm_ioctl: Block SIGPIPE so we can get EPIPE on write()

Block the SIGPIPE so that a failing write() can return an EPIPE
rather than killing the process with a SIGPIPE.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_bios: Block SIGPIPE so we can get EPIPE on write()
Stefan Berger [Tue, 21 Jan 2020 21:34:19 +0000 (16:34 -0500)]
swtpm_bios: Block SIGPIPE so we can get EPIPE on write()

Block the SIGPIPE so that a failing write() can return an EPIPE
rather than killing the process with a SIGPIPE.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm: Only accept() new client ctrl connection if we have none
Stefan Berger [Tue, 21 Jan 2020 21:32:48 +0000 (16:32 -0500)]
swtpm: Only accept() new client ctrl connection if we have none

Only accept new client connection on the control channel if we
currently do not have a client on the control channel.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_setup: Do not fail on future PCR banks' hashes
Stefan Berger [Fri, 17 Jan 2020 21:08:45 +0000 (16:08 -0500)]
swtpm_setup: Do not fail on future PCR banks' hashes

swtpm_setup will fail once libtpms starts supporting other PCR
hash banks than sha1, sha256, sha384, sha512, and sm3-256. So,
this patch allows to choose active PCR banks of the SHA3 series.
Further, unknown hash banks will not fail the tool anymore when
it tries to determine which hash banks are supported by the TPM
since it will then add the hex number of the hash algorithm to
the collection of supported hashes.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Allow seccomp override w/ SWTPM_TEST_SECCOMP_OPT env var
Stefan Berger [Wed, 15 Jan 2020 01:29:49 +0000 (20:29 -0500)]
tests: Allow seccomp override w/ SWTPM_TEST_SECCOMP_OPT env var

The Ubuntu (PPA) build system executes the build on an environment that
has problems with seccomp profiles. It does not allow us to run the test
suite with swtpm applying its seccomp profile since it fails with a
'bad system call' error. To work around this we introduce the env. variable
SWTPM_TEST_SECCOMP_OPT that we can set to "--seccomp action=none" to avoid
having swtpm apply it seccomp profile.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agodebian: Fix issues reported by lintian and changelog format issues
Stefan Berger [Tue, 14 Jan 2020 19:34:52 +0000 (19:34 +0000)]
debian: Fix issues reported by lintian and changelog format issues

Fix several issues reported by lintian and the format of
the changelog.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agobuild-sys: Display check result for build with libseccomp
Stefan Berger [Tue, 14 Jan 2020 19:31:18 +0000 (19:31 +0000)]
build-sys: Display check result for build with libseccomp

Display the check result of 'yes' or 'no' for whether we build
with libseccomp.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Move local functions to common file and handle errors better
Stefan Berger [Sun, 12 Jan 2020 22:41:56 +0000 (17:41 -0500)]
tests: Move local functions to common file and handle errors better

Move wait_port_open and wait_port_closed to common file and handle
the timeout errors in test_commandline.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Wait for PID file rather than reading it right away
Stefan Berger [Thu, 9 Jan 2020 23:42:57 +0000 (18:42 -0500)]
tests: Wait for PID file rather than reading it right away

Wait for the PID file to appear rather than reading it right away.
This addresses an issue when runnin the test suite under valgrind
(make -j $(nproc) check).

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Protect ${SWTPM_EXE} with quotes when passing to function
Stefan Berger [Sun, 12 Jan 2020 22:26:10 +0000 (17:26 -0500)]
tests: Protect ${SWTPM_EXE} with quotes when passing to function

SWTPM_EXE may be 'valgrind ... swtpm', so we have to protect it with quotes
when passing it as a parameter to a function.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_setup: Use 1st part of SWTPM_EXE/SWTPM_IOCTL to determine executable
Stefan Berger [Thu, 9 Jan 2020 21:48:30 +0000 (16:48 -0500)]
swtpm_setup: Use 1st part of SWTPM_EXE/SWTPM_IOCTL to determine executable

Search for the SWTPM_EXE / SWTPM_IOCTL executable using 'type -P' to
determine whether it is an executable rather than assuming a full path
is given on which we can check -x.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: delay reading of pidfile if found empty
Stefan Berger [Thu, 9 Jan 2020 21:36:35 +0000 (16:36 -0500)]
tests: delay reading of pidfile if found empty

Delay the reading of the PID file if it is found to be empty.
This can happend if swtpm is run by valgrind.

Also, use the passed parameters rather than the global ones to check
the PID file contents against the expected pid. So far this worked
because PID and PID_FILE were variables used by every caller.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Adjust timeouts for running executables with valgrind
Stefan Berger [Thu, 9 Jan 2020 19:57:01 +0000 (14:57 -0500)]
tests: Adjust timeouts for running executables with valgrind

When running the TPM 1.2 vtpm_proxy test cases by launching the
swtpm with valgrind it may take a long time for the log to be
written and the device to appear. This is due to the self test
of the TPM 1.2 taking a while. So we need to move the reading
of the device into a loop and set the timeout of the loop to 10s
so that it passed under these circumstances.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_setup: Keep reserved range of file descriptors for swtpm_setup.sh
Stefan Berger [Wed, 8 Jan 2020 19:52:20 +0000 (14:52 -0500)]
swtpm_setup: Keep reserved range of file descriptors for swtpm_setup.sh

swtpm_setup.sh uses file descriptor 100 for 'exec 100 <> ...'.
So we have to make sure that the file descriptor inherited from
the caller of swtpm_setup does not overlap with a reserved range
to be used by swtpm_setup.sh, which we declare to be [100..109].

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_setup: Log about encryption and fix c&p error in err msg
Stefan Berger [Tue, 7 Jan 2020 22:05:38 +0000 (17:05 -0500)]
swtpm_setup: Log about encryption and fix c&p error in err msg

Fix a cut and paste error in the error message output and be more
verbose in log about encryption when using file descriptors.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm: Add --print-capabilities to help screen of 'swtpm chardev'
Stefan Berger [Tue, 7 Jan 2020 15:51:49 +0000 (10:51 -0500)]
swtpm: Add --print-capabilities to help screen of 'swtpm chardev'

The --print-capabilities is missing in the 'swtpm chardev' help screen
but the code is there to interpret the command line flag. This patch
adds the missing lines to the help screen.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Fix key derivation TDES test cases to actually create TDES keys
Stefan Berger [Thu, 26 Dec 2019 04:38:51 +0000 (23:38 -0500)]
tests: Fix key derivation TDES test cases to actually create TDES keys

The byte stream contained the TDES identifier at the wrong position,
so no TDES key was created. This patch fixes this but needs an update
to libtpms since some unmarshalling/marshaling code related to TDES
was missing there as well.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_ioctl: Fix uninitialized variable 'pgi'
Stefan Berger [Mon, 23 Dec 2019 19:56:16 +0000 (14:56 -0500)]
swtpm_ioctl: Fix uninitialized variable 'pgi'

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Add test cases for new CrytpAdjustPrimeCandidate algo
Stefan Berger [Tue, 18 Jun 2019 20:23:12 +0000 (16:23 -0400)]
tests: Add test cases for new CrytpAdjustPrimeCandidate algo

Extend the existing key derivation test case for TPM 2 with test cases
that use a newer TPM 2 state where we now exercise the new
CryptAdjustPrimeCandidate algorithm that produces the same results on
big and little enidan 32 bit and 64 bit machines. This newer algorithm
is available in libtpms with revision 155 of the TPM 2 code.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Have IBM TSS2 test case use tags/v1.3.0 of the TPM 2.0 TSS repo
Stefan Berger [Sat, 21 Dec 2019 00:06:06 +0000 (19:06 -0500)]
tests: Have IBM TSS2 test case use tags/v1.3.0 of the TPM 2.0 TSS repo

Use v1.3.0 of the IBM TSS 2.0 repo.

Depending on the revision that libtpms implements, some test cases have to be
replaced with empty files.

The test suite now works with the libtpms stable-0.6.0 and stable-0.7.0
branches. A patch fixing an NV PIN issue needed to be applied to those
branches.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoFix a 1 letter typo in INSTALL instructions
George Almasi [Tue, 3 Dec 2019 18:59:25 +0000 (18:59 +0000)]
Fix a 1 letter typo in INSTALL instructions

Signed-off-by: George Almasi <gheorghe@us.ibm.com>
4 years agoTravis: Add asan build for non-openssl usage in libtpms
Stefan Berger [Wed, 27 Nov 2019 16:01:13 +0000 (11:01 -0500)]
Travis: Add asan build for non-openssl usage in libtpms

Since I am not often using the non-openssl crypto function usage
in libtpms, add a build to Travis that exercises the old code.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agotests: Protect variable with executable with quotes
Stefan Berger [Mon, 18 Nov 2019 12:00:36 +0000 (07:00 -0500)]
tests: Protect variable with executable with quotes

The test_print_capability is failing if SWTPM_EXE is for example
holding more than one parameter like 'valgrind ... /bin/swtpm' since the
variable was not protected with quotes. This patch fixes this.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoTravis: Work around failing OsX builds due to brew error
Stefan Berger [Thu, 24 Oct 2019 20:27:29 +0000 (16:27 -0400)]
Travis: Work around failing OsX builds due to brew error

The Travis build on OSX was failing due to the following error:

/usr/local/Homebrew/Library/Homebrew/brew.rb:23:in `require_relative': \
   /usr/local/Homebrew/Library/Homebrew/global.rb:110: \
   syntax error, unexpected keyword_rescue, expecting keyword_end (SyntaxError)

from /usr/local/Homebrew/Library/Homebrew/brew.rb:23:in `<main>'

The command "brew tap discoteq/discoteq" failed and exited with 1 during .

This patch resolves the issue.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoswtpm_cert: Use gnutls_x509_crt_get_subject_key_id API call for subj keyId
Stefan Berger [Tue, 22 Oct 2019 15:06:32 +0000 (11:06 -0400)]
swtpm_cert: Use gnutls_x509_crt_get_subject_key_id API call for subj keyId

Use the gnutls_x509_crt_get_subject_key_id() API call to get the subject
key ID of the signer's certificate rather than gnutls_x509_crt_get_key_id().
The latter returns the same result most of the time but there are instances
when this is not the case and the returned result is wrong.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
4 years agoCorrect parameter name typo
Jeremy Liu [Mon, 14 Oct 2019 09:50:25 +0000 (17:50 +0800)]
Correct parameter name typo

Signed-off-by: Jeremy Liu <liujiong@gohighsec.com>
4 years agoswtpm_cert: Fix OIDs for TPM 2 platforms data
Stefan Berger [Wed, 9 Oct 2019 20:01:07 +0000 (16:01 -0400)]
swtpm_cert: Fix OIDs for TPM 2 platforms data

The OIDs for the TPM 1.2 and TPM 2 platform data
are different (though have the same name in the spec).
Adapt them for the TPM 2 case.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotests: Skip seccomp check if env. sets up seccomp profile
Stefan Berger [Thu, 8 Aug 2019 10:47:24 +0000 (06:47 -0400)]
tests: Skip seccomp check if env. sets up seccomp profile

If the test environment is running in a seccomp profile do not check
that the seccomp profile of the swtpm process runs with the action
provided in --seccomp action=... since the environment may override
this.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoSELinux: Need more rules for QEMU and KVM type of VMs on F30
Stefan Berger [Fri, 26 Jul 2019 23:02:48 +0000 (19:02 -0400)]
SELinux: Need more rules for QEMU and KVM type of VMs on F30

More rules are needed for QEMU and KVM type VMs on F30.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Fix typo in error report: HMAC instead of hash
Stefan Berger [Thu, 25 Jul 2019 11:07:00 +0000 (07:07 -0400)]
swtpm: Fix typo in error report: HMAC instead of hash

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Use writev_full rather than writev; fixes --vtpm-proxy EIO error
Stefan Berger [Tue, 23 Jul 2019 12:09:11 +0000 (08:09 -0400)]
swtpm: Use writev_full rather than writev; fixes --vtpm-proxy EIO error

We have to use writev_full() when --vtpm-proxy is used since writev()
does not seem to work and we get an EIO error. writev_full() uses write(),
so we can use it.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoSELinux: A few more rules needed for F30
Stefan Berger [Tue, 23 Jul 2019 11:42:37 +0000 (07:42 -0400)]
SELinux: A few more rules needed for F30

A few more rules are needed on Fedora 30 to have libvirt start swtpm.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agorpm: Adjust the RPM spec for 0.2.0 release
Stefan Berger [Tue, 16 Jul 2019 18:38:34 +0000 (14:38 -0400)]
rpm: Adjust the RPM spec for 0.2.0 release

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotests: Fix spelling of call to function validate_pidfile
Stefan Berger [Fri, 19 Jul 2019 14:11:00 +0000 (10:11 -0400)]
tests: Fix spelling of call to function validate_pidfile

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agodebian: Adjust changelog for 0.2.0 release
Stefan Berger [Tue, 16 Jul 2019 18:28:24 +0000 (14:28 -0400)]
debian: Adjust changelog for 0.2.0 release

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoCHANGES: Write changelog for v0.2.0
Stefan Berger [Tue, 16 Jul 2019 18:26:29 +0000 (14:26 -0400)]
CHANGES: Write changelog for v0.2.0

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Address Coverity's dead code complaint
Stefan Berger [Sun, 14 Jul 2019 01:29:46 +0000 (21:29 -0400)]
swtpm: Address Coverity's dead code complaint

Signed-off-by: stefan Berger <stefanb@linux.ibm.com>
5 years agoTravis: Only clone libtpms if libtpms dir does not exist
Stefan Berger [Sat, 13 Jul 2019 20:54:59 +0000 (16:54 -0400)]
Travis: Only clone libtpms if libtpms dir does not exist

Only build the libtpms dir if it doesn't exist. When we do a Coverity
scan build it looks like we are now running the script afterwards as
well and this creates a build failure due to the 2nd clone.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Loop over poll() in case of EINTR
Stefan Berger [Sat, 13 Jul 2019 01:04:04 +0000 (21:04 -0400)]
swtpm: Loop over poll() in case of EINTR

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
5 years agoswtpm: Convert read() to read_eintr() which handles EINTR
Stefan Berger [Sat, 13 Jul 2019 00:53:22 +0000 (20:53 -0400)]
swtpm: Convert read() to read_eintr() which handles EINTR

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
5 years agoswtpm: Implement read_eintr() to read into a buffer and handle EINTR
Stefan Berger [Fri, 12 Jul 2019 21:18:32 +0000 (17:18 -0400)]
swtpm: Implement read_eintr() to read into a buffer and handle EINTR

Implement read_eintr() to read into a buffer and handle EINTR on
the way.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
5 years agoswtpm: Use write_full instead of plain write
Stefan Berger [Fri, 12 Jul 2019 21:04:39 +0000 (17:04 -0400)]
swtpm: Use write_full instead of plain write

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
5 years agoswtpm: Implement write_full and writev_full
Stefan Berger [Fri, 12 Jul 2019 20:51:17 +0000 (16:51 -0400)]
swtpm: Implement write_full and writev_full

Implement write_full and writev_full that handle partial writes.

Implement writev_full using write_full since handling partial writes
with iovec's can become quite complicated.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
5 years agotests: Get swtpm PID from shell and validate against pidfile after
Stefan Berger [Fri, 12 Jul 2019 21:56:05 +0000 (17:56 -0400)]
tests: Get swtpm PID from shell and validate against pidfile after

Get the PID of the started swtpm from the shell and validate it
against the contents of the pidfile afterwards.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoSELinux: Add rule for passing pass phrase via file descriptor
Stefan Berger [Fri, 12 Jul 2019 16:04:26 +0000 (12:04 -0400)]
SELinux: Add rule for passing pass phrase via file descriptor

Add a rule so we can pass a passphrase from libvirt to swtpm using
a file descriptor.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotests: Extend --print-capabilities tests with test of swtpm_setup
Stefan Berger [Tue, 2 Jul 2019 21:41:35 +0000 (17:41 -0400)]
tests: Extend --print-capabilities tests with test of swtpm_setup

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoman: Document swtpm_setup --print-capabilities option
Stefan Berger [Sat, 29 Jun 2019 02:14:14 +0000 (22:14 -0400)]
man: Document swtpm_setup --print-capabilities option

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm_setup: Add --print-capabilities option
Stefan Berger [Sat, 29 Jun 2019 02:11:09 +0000 (22:11 -0400)]
swtpm_setup: Add --print-capabilities option

Extend swtpm_setup with the --print-capabilities option which
prints a JSON object describing supported features.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm_setup: Test filenames for empty string before trying to remove
Stefan Berger [Thu, 4 Jul 2019 13:17:10 +0000 (13:17 +0000)]
swtpm_setup: Test filenames for empty string before trying to remove

rm on NetBsd prints out an error message when trying to remove a file
with an empty filename. Avoid this situation by checking for non-empty
filenames first.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotests: Add test case for --print-capabilities test
Stefan Berger [Tue, 25 Jun 2019 13:37:49 +0000 (09:37 -0400)]
tests: Add test case for --print-capabilities test

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoman: Update man pages with --print-capabilities option
Stefan Berger [Tue, 25 Jun 2019 15:39:19 +0000 (11:39 -0400)]
man: Update man pages with --print-capabilities option

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Add --print-capabilities option to command line
Stefan Berger [Mon, 24 Jun 2019 17:41:02 +0000 (13:41 -0400)]
swtpm: Add --print-capabilities option to command line

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Implement support for printing newly added capabilities
Stefan Berger [Mon, 24 Jun 2019 16:36:39 +0000 (12:36 -0400)]
swtpm: Implement support for printing newly added capabilities

Implement support for printing newly added capabilities, such as
being able to read the key and password from a file descriptor.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Add missing include file to ctrlchannel.h
Stefan Berger [Mon, 24 Jun 2019 18:37:43 +0000 (14:37 -0400)]
swtpm: Add missing include file to ctrlchannel.h

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Stub handle_seccomp_options if WITH_SECCOMP is not defined
Stefan Berger [Mon, 24 Jun 2019 16:22:57 +0000 (12:22 -0400)]
swtpm: Stub handle_seccomp_options if WITH_SECCOMP is not defined

Stub out the handle_seccomp_options function and other unused
code and data if WITH_SECCOMP is not defined.

Currently the handle_seccomp_options would always be called with
a NULL string to parse if WITH_SECCOMP is not defined, so this just
eliminates the code that will never be called.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm_setup: Avoid calling getpwnam() if change_user == false
Stefan Berger [Fri, 5 Jul 2019 16:50:16 +0000 (16:50 +0000)]
swtpm_setup: Avoid calling getpwnam() if change_user == false

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Have swtpm report PTM_CAP_SEND_COMMAND_HEADER flag
Stefan Berger [Tue, 9 Jul 2019 13:46:55 +0000 (09:46 -0400)]
swtpm: Have swtpm report PTM_CAP_SEND_COMMAND_HEADER flag

Have swtpm report PTM_CAP_SEND_COMMAND_HEADER flag for a TPM 2
indicating that it knows how to handle the TCG header prefix
for the data channel.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Have get_ptm_caps_supported return supported PTM_CAPs
Stefan Berger [Mon, 24 Jun 2019 17:44:46 +0000 (13:44 -0400)]
swtpm: Have get_ptm_caps_supported return supported PTM_CAPs

Create function get_ptm_caps_supported and have it return the
supported PTM_CAPs.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoman: Add 'since v0.2' to --seccomp option documentation
Stefan Berger [Tue, 9 Jul 2019 13:38:29 +0000 (09:38 -0400)]
man: Add 'since v0.2' to --seccomp option documentation

--seccomp option was added in v0.2. Add this to the man page.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Set missing PTM_CAP_GET_INFO capability flag for CUSE TPM
Stefan Berger [Tue, 9 Jul 2019 13:30:40 +0000 (09:30 -0400)]
swtpm: Set missing PTM_CAP_GET_INFO capability flag for CUSE TPM

CUSE TPM did not report the PTM_CAP_GET_INFO flag. This patch fixes
it.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotests: Have IBM TSS2 test not use the raw interface anymore
Stefan Berger [Sat, 6 Jul 2019 11:41:54 +0000 (07:41 -0400)]
tests: Have IBM TSS2 test not use the raw interface anymore

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Handle TPM 2 command header prefix
Stefan Berger [Sat, 6 Jul 2019 11:40:28 +0000 (07:40 -0400)]
swtpm: Handle TPM 2 command header prefix

Add support for handling the TPM 2 command header prefix that looks like this:

struct tpm2_send_command_prefix {
    uint32_t cmd;
    uint8_t  locality;
    uint32_t size;
};

This patch converts the existing send function to use an array of struct iovec
using writev() where we can optinally prepend a response header and trailer.
We detect whether the command had the above type of header prefixed and if so
indicate this with an offset into the byte stream where the normal TPM command
starts, which follows right after this header. In case such a header was found
we prepend a header in the response and append a 4-byte trailer. For TPM 1.2
there are no changes and for raw TPM 2 commands there are no changes, either.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Have SWTPM_IO_Read read at least the 10 bytes from the TPM header
Stefan Berger [Fri, 5 Jul 2019 20:43:50 +0000 (16:43 -0400)]
swtpm: Have SWTPM_IO_Read read at least the 10 bytes from the TPM header

Have SWTPM_IO_Read() read at leat the 10 bytes from the (regular) TPM
header. This solves a particular problem with the TPM 2 header prefix for
which we will add support in the subsequent patch. In the prefix case the IBM
TSS 2 stack sends 4 bytes for the command, then 1 byte for the locality, and then
4 bytes for the length indicator followed by the command. If we just read once
we would only then get 4 bytes. Reading 10 bytes gets all of these plus the sub-
sequent TPM command or the whole TPM command in case this prefix header is
missing.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Re-add header includes for BSD
Stefan Berger [Fri, 5 Jul 2019 16:41:41 +0000 (16:41 +0000)]
swtpm: Re-add header includes for BSD

Some BSDs need more #includes than Linux does. Re-add them as I removed too many
before.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: More cleanup in swtpm_io.c
Stefan Berger [Fri, 5 Jul 2019 15:33:55 +0000 (11:33 -0400)]
swtpm: More cleanup in swtpm_io.c

- Simplify SWTPM_IO_Write()
- Remove unnecessary includes
- Clean up other cruft

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Get rid of MAINLOOP_READALL flag
Stefan Berger [Fri, 5 Jul 2019 15:18:31 +0000 (11:18 -0400)]
swtpm: Get rid of MAINLOOP_READALL flag

Now that we will always read all bytes available on a file descriptor
we don't need the MAINLOOP_READALL flag anymore.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Simplify the reading of TPM commands
Stefan Berger [Fri, 5 Jul 2019 15:09:12 +0000 (11:09 -0400)]
swtpm: Simplify the reading of TPM commands

Simplify the readin of TPM commands to always read all available
bytes from a file descriptor.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Use exit in main with parameter EXIT_FAILURE/SUCCESS
Stefan Berger [Fri, 5 Jul 2019 12:17:35 +0000 (08:17 -0400)]
swtpm: Use exit in main with parameter EXIT_FAILURE/SUCCESS

Convert all return's and exit(1) to use exit with EXIT_FAILURE
or EXIT_SUCCESS as parameter.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotests: Add TPM 1.2 test cases for passing key and passphrase via fd
Stefan Berger [Wed, 3 Jul 2019 01:25:40 +0000 (21:25 -0400)]
tests: Add TPM 1.2 test cases for passing key and passphrase via fd

Add TPM 1.2 test cases to test_parameters for testing the passing of key
and passphrase via file descriptor. Also extend the test to check whether
the state files are encrypted.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm_setup: Use swtpm_ioctl to re-init the TPM 1.2 for activation
Stefan Berger [Wed, 3 Jul 2019 01:18:51 +0000 (21:18 -0400)]
swtpm_setup: Use swtpm_ioctl to re-init the TPM 1.2 for activation

Since we can only read the file descriptor for the passphrase once,
we cannot stop the TPM 1.2 and then restart it but we have to use
'swtpm_ioctl -i' to re-init it.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm_setup: Redirect error output of swtpm_bios to stdout
Stefan Berger [Tue, 2 Jul 2019 23:33:06 +0000 (19:33 -0400)]
swtpm_setup: Redirect error output of swtpm_bios to stdout

Redirect the stderr output of swtpm_bioc to stdout so we can
capture the message.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoman: Fix typos in swtpm_setup man page
Stefan Berger [Mon, 1 Jul 2019 00:39:58 +0000 (20:39 -0400)]
man: Fix typos in swtpm_setup man page

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotest: Make sure that when key is passed state is encrypted
Stefan Berger [Thu, 27 Jun 2019 22:49:26 +0000 (18:49 -0400)]
test: Make sure that when key is passed state is encrypted

Make sure that when keyfile/keyfile-fd or pwdfile/pwdfile-fd are passed
to swtpm_setup that the resulting state is actually encrypted. We check
for encrypted state by making sure that 4-byte sequences of 0-bytes are
not there while they are there for un-encrypted state.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoman: Update swtpm_setup page with the new options for passing file descriptors
Stefan Berger [Thu, 27 Jun 2019 23:13:01 +0000 (19:13 -0400)]
man: Update swtpm_setup page with the new options for passing file descriptors

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agotest: Test passing file descriptor to swtpm_setup
Stefan Berger [Thu, 27 Jun 2019 22:32:29 +0000 (18:32 -0400)]
test: Test passing file descriptor to swtpm_setup

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm_setup: Allow passing file descriptor for key or password files
Stefan Berger [Thu, 27 Jun 2019 22:29:56 +0000 (18:29 -0400)]
swtpm_setup: Allow passing file descriptor for key or password files

Also extend swtpm_setup to allow passing the file descriptor for
the key or password files or pipes.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
5 years agoswtpm: Add missing pwdfd=<fd> to help screen
Stefan Berger [Thu, 27 Jun 2019 20:58:16 +0000 (16:58 -0400)]
swtpm: Add missing pwdfd=<fd> to help screen

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>