Commit Graph

625 Commits

Author SHA1 Message Date
Marc-André Lureau
da8752b1f7 swtpm: report 'tpm-1.2' & 'tpm-2.0' in --print-capabilities
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-08-10 07:13:24 -04:00
Marc-André Lureau
ccaf99f12c swtpm: ignore failure to choose version for --print-capabilities
A version was selected early for TPMLIB_GetInfo() to succeed in
--print-capabilities. TPM 1.2 is the default version, but can now be
disabled in libtpms.

Ignore the error when the version is unsupported by libtpms and skip
reporting the GetInfo related details.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-08-10 07:13:24 -04:00
Nick Chevsky
6961ec4878 swtpm: Preserve mlp->flags in CMD_SET_DATAFD handler
Fix the handler for control channel command CMD_SET_DATAFD so that
it ORs new bits onto mlp->flags instead of overwriting its value.
This was causing loss of flags previously set during command-line
argument parsing, which resulted in user-provided options (e.g.
--terminate) to be permanently ignored if command CMD_SET_DATAFD
was at any point received on the control channel.

Signed-off-by: Nick Chevsky <nchevsky@users.noreply.github.com>
2021-08-02 07:46:00 -04:00
Stefan Berger
6f7a1e2769 swtpm: Use the pollfd array's enums as indices when initializing the array
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-08-01 18:49:27 -04:00
Stefan Berger
78559edde9 swtpm_setup: Support --write-ek-cert-files as an option
Write the EK certificate files into the directory specified as parameter
to the --write-ek-cert-files option.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-07-30 16:45:22 -04:00
Stefan Berger
a4cead5a8a swtpm_setup: Get key description from function generating the EK key
Pass an optional key_description parameter through the APIs to be able to
get the a human readable key description, such as 'rsa2048' or 'secp384r1'
of the key that was created.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-07-30 16:45:22 -04:00
Stefan Berger
dbb1bbf87d swtpm_setup: Move functions checking for directory access to library
Move code from setpm_setup into new function check_directory_access
that checks for existence of directory and access to it.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-07-30 16:45:22 -04:00
Stefan Berger
cab1e2186f build-sys: Add MY_CFLAGS, CFLAGS, and MY_LDFLAGS to all Makefile.am's
Add MY_CFLAGS, CFLAGS, and MY_LDFLAGS to all Makefile.am's so that they
can be defined during configure time as well as CFLAGS added during
build time. LDFLAGS were already handled correctly during build-time.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-07-27 15:39:48 -04:00
Stefan Berger
da7338961b build-sys: Rename AM_CFLAGS/LDFLAGS to MY_CFLAGS/LDFLAGS
To avoid the following warning use MY_ as a prefix for the offending
variables that have AM_ as a prefix:

configure.ac:587: warning: macro 'AM_CFLAGS' not found in library
configure.ac:590: warning: macro 'AM_LDFLAGS' not found in library

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-07-27 15:39:48 -04:00
Stefan Berger
71a4e33adc Revert "build-sys: Remove using AM_CFLAGS and AM_LDFLAGS"
This reverts commit 7f81d31288.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-07-27 15:39:48 -04:00
Nick Chevsky
ddc7521653 Move swtpm_localca sources from samples/ to src/
- Move swtpm_localca's sources out of samples/ (where they no longer
  belong now that swtpm_localca is a binary) to src/swtpm_localca/.
- Tests now call the swtpm_localca binary directly at the location
  where it was built, as they do with all other compiled programs.
- Simplify samples/swtpm-localca.in and delete swtpm-localca.2inst,
  removing the now-unnecessary logic to selectively call swtpm_localca
  from different locations (samples/ when running tests vs. /usr/bin/
  post-installation).

Signed-off-by: Nick Chevsky <nchevsky@users.noreply.github.com>
2021-07-25 08:52:13 -04:00
Stefan Berger
05f64f5529 swtpm_setup: Fix compiler errors when memcpy is a macro (Cygwin)
Since commit 502cb1129a -D_FORTIFY_SOURCE=2 is passed to the gcc
command line resulting in memcpy() becoming a macro on Cygwin, which
then causes the following compiler errors due to the anonymous arrays
being used:

swtpm.c: In function ‘swtpm_tpm2_createprimary_ek_rsa’:
swtpm.c:686:26: error: macro "memcpy" passed 34 arguments, but takes just 3
  686 |         }, authpolicy_len);
      |                          ^
In file included from /usr/include/string.h:180,
                 from swtpm.c:15:
/usr/include/ssp/string.h:97: note: macro "memcpy" defined here
   97 | #define memcpy(dst, src, len) __ssp_bos_check3(memcpy, dst, src, len)
      |
swtpm.c:682:9: error: statement with no effect [-Werror=unused-value]
  682 |         memcpy(authpolicy, (unsigned char []){
      |         ^~~~~~
swtpm.c:698:26: error: macro "memcpy" passed 50 arguments, but takes just 3
  698 |         }, authpolicy_len);
      |                          ^

The solution is to surround the anonymous array definitions with '( )'.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-07-14 14:16:26 -04:00
Stefan Berger
ecdfc77116 swtpm: Fix issues raised by -Wextra (Cygwin)
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-24 18:58:22 -04:00
Eiichi Tsukata
a5f4e65749 swtpm: Issue fsync to ensure state data reaches disk
Add fsync(2) before rename(2) for temp file to ensure data reaches disk
and for directory which containing state file to ensure directory entry
also reaches disk.

Signed-off-by: Eiichi Tsukata <eiichi.tsukata@nutanix.com>
2021-06-24 16:19:59 -04:00
Stefan Berger
a69388c0f4 swtpm_setup: Fix issues raised by -Wextra
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-24 15:05:03 -04:00
Stefan Berger
6a6fd6e811 swtpm_ioctl: Fix issues raised by -Wextra
Signed-off-by: Stefan Berger <stefanb@linu.ibm.com>
2021-06-24 15:05:03 -04:00
Stefan Berger
e7488fd1e5 swtpm_cert: Fix issues raised by -Wextra
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-24 15:05:03 -04:00
Stefan Berger
5302269acc swtpm_bios: Fix issues raised by -Wextra
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-24 15:05:03 -04:00
Stefan Berger
fa2fc871d2 swtpm: Fix issues raised by -Wextra
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-24 15:05:03 -04:00
Tomasz Kłoczko
75c5da2cf1 build-sys: Remove using -L$(PWD)/.libs -lswtpm_libtpms on linking
Such paths should not be used.
Use proper linker libswtpm_libtpms.la scripyt generated by libtool.

Signed-off-by: Tomasz Kłoczko <kloczek@github.com>
2021-06-22 17:03:31 -04:00
Tomasz Kłoczko
7f81d31288 build-sys: Remove using AM_CFLAGS and AM_LDFLAGS
Those automake variables are used by default.

Signed-off-by: Tomasz Kłoczko <kloczek@github.com>
2021-06-22 17:03:31 -04:00
Stefan Berger
a59eead4bc swtpm_setup: Initialize Gerror and free it
Gerror was not initialized to NULL in one place. In the other it wasn't
freed.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-16 18:01:35 -04:00
Felipe Franciosi
4a96c7f54a swtpm: Fix SWTPM names in comments and messages
Some of the code comes from libtpms, where various methods are named
"TPM_Something". The swtpm version of these methods are named
"SWTPM_Something". However, certain debug/log messages and comments were
updated accordingly to reflect that.

This is a cosmetic change that fixes that.

Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
2021-06-15 08:35:53 -04:00
Stefan Berger
2bf68cc4be swtpm_setup: Replace '\\s' in regex with [[:space:]] to fix cygwin
Cygwin's regex implementation doesn't seem to understand '\\s'
but needs [[:space:]] instead to properly skip over spaces.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-11 07:53:28 -04:00
Stefan Berger
932dc4e270 build-sys: Add HARDENING_CFLAGS and _LDFLAGS to all C programs
Add the HARDENING_CFLAGS and _LDFLAGS to all C programs.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-04 16:04:09 -04:00
Stefan Berger
c86be8d960 swtpm: Add 2021 as year in the Copyright notice
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-04 16:04:09 -04:00
Stefan Berger
80271b5f26 swtpm_setup: Fix the strjoin for the PID file path
The path for the PID file was not joined correctly and was missing
a '/'. Fix this now.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-04 16:04:09 -04:00
Stefan Berger
c8c3bb4170 swtpm_setup: Initialize autfreed variables with NULL (gcc-11)
This patch addresses the following gcc-11 compiler issues:

In file included from /usr/include/glib-2.0/glib.h:114,
                 from swtpm_setup_utils.c:14:
swtpm_setup_utils.c: In function 'get_config_value':
/usr/include/glib-2.0/glib/glib-autocleanups.h:28:3: error: 'tmp' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   28 |   g_free (*pp);
      |   ^~~~~~~~~~~~
swtpm_setup_utils.c:36:31: note: 'tmp' was declared here
   36 |             g_autofree gchar *tmp;
      |                               ^~~

swtpm.c: In function 'swtpm_start':
/usr/include/glib-2.0/glib/glib-autocleanups.h:28:3: error: 'pidfile_file' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   28 |   g_free (*pp);
      |   ^~~~~~~~~~~~
swtpm.c:54:23: note: 'pidfile_file' was declared here
   54 |     g_autofree gchar *pidfile_file;
      |                       ^~~~~~~~~~~~

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-04 16:04:09 -04:00
Stefan Berger
4ec17885c4 utils: Have logit and logerr call alog to unify their code
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-01 09:31:43 -04:00
Stefan Berger
e689684c57 samples: Rewrite of swtpm_localca in 'C' (addresses issue #437)
This is a 1:1 rewrite of swtpm_localca in 'C' as a final step to get
rid of the python dependency. It addresses issue #437.

Tested on: Cygwin, Fedora 33, Ubuntu Xenial & Bionic, FreeBSD,
           DragonFlyBSD, OpenBSD (i386), Mac, Debian (recent), Centos-8,
           CentOS (recent), Alpine (recent), OpenSUSE (recent),
           Fedora 28 PPC Big Endian

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-01 09:31:43 -04:00
Stefan Berger
b1cde69b09 swtpm_setup: Add proper DEPENDENCY for swtpm_setup on swtpm_utils.la
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-06-01 09:31:43 -04:00
Stefan Berger
c125e34bf2 swtpm_setup: Rewrite in 'C' (addresses issue #437)
This is a 1:1 rewrite of swtpm_setup in 'C' as a first step to get
rid of the python dependency. It addresses issue #437.

Tested on: Cygwin, Fedora 33, Ubuntu Xenial & Bionic, FreeBSD,
           DragonFlyBSD, OpenBSD (i386), Mac, Debian (recent), Centos-8,
           CentOS (recent), Alpine (recent), OpenSUSE (recent)

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-05-28 13:08:16 -04:00
Stefan Berger
eb178f87c6 swtpm_setup: Fix TPM 1.2 default SRK and owner password and help screen
Some of the wording in the help screen was odd, so rephrase it.

Fix the default owner and SRK passwords for the TPM 1.2 case.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-05-26 19:52:06 -04:00
Stefan Berger
a56a3c027f swtpm_setup: Fix some minor issue
Fix some typos. The value for TPM2_ALG_SHA3_512 was wrong but also is
currently not used since libtpms does not support it yet.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-05-26 19:52:06 -04:00
Stefan Berger
3be2ad2855 swtpm: Initialize key structure before calling OpenSSL function (Coverity)
Initialize the key structure before loading the key into it. This
resolves an issue raised by Coverity, but doesn't seem to be really
necessary.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-05-22 11:28:53 -04:00
Jonas Witschel
4b825a3d94 swtpm_cert: rename deprecated libtasn1 types
These types have been renamed in libtasn1 version 3.0 (released 2012-10-28).
The most recent libtasn1 version 4.17.0 (released 2021-05-13) now prints
deprecation warnings that are made fatal by -Werror:

ek-cert.c:76:13: error: 'ASN1_ARRAY_TYPE' macro is deprecated, use 'asn1_static_node' instead. [-Werror]
   76 | extern const ASN1_ARRAY_TYPE tpm_asn1_tab[];
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[...]

The new types were introduced almost ten years ago, so they should be pretty
universally available by now.

Signed-off-by: Jonas Witschel <diabonas@archlinux.org>
2021-05-21 13:26:10 -04:00
Marc-André Lureau
da2d2f3996 build-sys: leave CFLAGS/LDFLAGS for user to be defined
This allows user to set specific flags during compilation, without
overriding configure-time cflags necessary for compilation.

See also:
https://www.gnu.org/software/automake/manual/html_node/User-Variables.html
https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-05-18 18:24:51 -04:00
Stefan Berger
debdb13648 swtpm: Free error that was set by failed options_parse
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-03-21 08:18:23 -04:00
Stefan Berger
ef1407f56d swtpm_setup: Write note about non-standard EK when using --allow-signing
Write a note in swtpm_setup's help screen and man page that the usage
of --allow-signing will lead to a non-standard EK. Be more precise in the
man page.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-03-01 07:54:27 -05:00
Stefan Berger
20524cb213 swtpm_ioctl: Use timeouts for communicating with swtpm (Unix socket)
Start using timeouts when communicating with swtpm over Unix sockets so
that swtpm_ioctl does not just hang when it cannot communicate with swtpm
such as establishing a connection or reading results. This is because swtpm
listens to nlye one control channel connections.

This patch addresses an aspect of the problem reported in issue #415
but may also starting hiding bugs if certain operations are done in
the wrong order, as was the case in libvirt (6.10 & 7.0).

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-02-25 07:28:47 -05:00
Stefan Berger
90e2be928d swtpm: Fix spelling in comment (SWPTM->SWTPM)
This patch fixes issue #410.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-02-05 16:48:55 -05:00
Stefan Berger
554f52ae0a swtpm_setup: Fix typo in project URL (swptm->swtpm)
This fixes issue #410.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-02-05 16:48:55 -05:00
Stefan Berger
fa1b93904e swtpm_setup: Replace OSError with ValueError (Cygwin bugfix)
A wrong domain to socketpair() causes a ValueError, not an OSError.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-02-02 12:37:00 -05:00
Stefan Berger
224ee05163 swtpm_setup: Probe for supported socketpair domain (cygwin bugfix)
We need to probe for the support socketpair() domain. On Linux only
socket.AF_UNIX is support and on Cygwin AF_INET works.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-02-01 14:48:32 -05:00
Stefan Berger
c396f23f50 swtpm: Fix --print-capabilities for 'swtpm chardev'
This patch fixes the following issue:

$ ./src/swtpm/swtpm chardev --print-capabilities --tpm2
swtpm: Error: Missing character device or file descriptor

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-01-13 11:32:16 -05:00
Stefan Berger
024073c5cc swtpm_cuse: Support parial reads (issue #376)
This patch adds support for partial reads to the CUSE swtpm.

We introduce a ptm_read_offset variable that holds the offset where to read
from next. It is reset every time a command has been processed as part of a
write() so that subsequent read()s start reading from offset 0. It is
advanced by the number of bytes that were read.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-01-04 07:51:50 -05:00
Stefan Berger
e753128b27 swtpm: Remove unused file_ops_lock from threadpool.c (asan)
Asan reports this error for the CUSE TPM. The file_ops_lock was accidentally
duplicated in a code move of threadpool related code out of cuse_tpm.c
This patch removes the unused file_ops_lock from threadpool.c to resolve
the ASAN issue.

=================================================================
==545493==ERROR: AddressSanitizer: odr-violation (0x000000419340):
  [1] size=8 'file_ops_lock' cuse_tpm.c:112:8
  [2] size=8 'file_ops_lock' threadpool.c:55:8
These globals were registered at these points:
  [1]:
    #0 0x14f6c27f3cc8  (/lib64/libasan.so.6+0x37cc8)
    #1 0x40c2c3 in _sub_I_00099_1 (/home/stefanb/tmp/swtpm/src/swtpm/.libs/lt-swtpm+0x40c2c3)
    #2 0x40c31c in __libc_csu_init (/home/stefanb/tmp/swtpm/src/swtpm/.libs/lt-swtpm+0x40c31c)

  [2]:
    #0 0x14f6c27f3cc8  (/lib64/libasan.so.6+0x37cc8)
    #1 0x14f6c27aad1a in _sub_I_00099_1 (/home/stefanb/tmp/swtpm/src/swtpm/.libs/libswtpm_libtpms.so.0+0x25d1a)
    #2 0x14f6c31dc7b1 in call_init.part.0 (/lib64/ld-linux-x86-64.so.2+0x117b1)

==545493==HINT: if you don't care about these errors you may set ASAN_OPTIONS=detect_odr_violation=0
SUMMARY: AddressSanitizer: odr-violation: global 'file_ops_lock' at cuse_tpm.c:112:8
==545493==ABORTING

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-01-03 18:42:05 -05:00
Stefan Berger
4450856d6d swtpm: Free buffer after failure to realloc (cppcheck)
Free the original buffer after failure to realloc().

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-01-02 12:16:39 -05:00
Stefan Berger
6b50772217 swtpm: Remove global unused variable input (issue #395)
Remove the global unused variable with name input. This was detected
by cppcheck.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2021-01-02 12:16:39 -05:00
Stefan Berger
62b7fcd9f3 swtpm_ioctl: Remove unnecessary if statement (issue #392)
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com)
2020-12-30 08:11:14 -05:00