Commit Graph

1293 Commits

Author SHA1 Message Date
Stefan Berger
0ae978cc21 tpm2: Initialize stack variable indexOrderlyRam to zeros
Valgrind reports uninitialized bytes when running some of the swtpm test
cases. The reason is that the indexOrderlyRam variable, which resides on
the stack, was not initialized. This patch fixes this valgrind complaint.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-26 20:41:53 -04:00
Stefan Berger
e8e8633089 tpm2: The state file exists on return code != TPM_RETRY
Modify the test for whether a state file exists by return code from the
load function being != TPM_RETRY. All other error codes indicate that some
form of state file exists, independent whether it is readable or not.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-17 09:07:27 -04:00
Stefan Berger
4111bd1bcf rpm: Address some of the rpmlint complaints
Remaining rpmlint complaint is the download URL. There's currently no
public tar to download.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com
2018-09-13 09:48:45 -04:00
Stefan Berger
5cc673f73d debian: Use autogen.sh and pass --with-tpm2 to configure
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-13 09:13:30 -04:00
Stefan Berger
1fe484ce67 scripting: Use #!/usr/bin/env bash rather than /bin/bash
On some systems /bin/bash does not exists but is somewhere else and can
be invoked with /usr/bin/env.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-10 16:33:34 +00:00
Stefan Berger
7a0e7052be build-sys: Pick up user-provided LDFLAGS
Pick up the user-provided LDFLAGS by assigning LDFLAGS using +=.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-10 12:22:07 -04:00
Stefan Berger
418d2a22cd tpm2: Enable compilation on DragonflyBSD
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-10 16:15:29 +00:00
Stefan Berger
3300bbbcae build-sys: Make 'make check' work on FreeBSD
On FreeBSD we need to set the SHELL explicitly to /bin/bash since csh
is used otherwise and wouldn't allow us to run the check-local rule.
Besides that we need -shared for the check to pass. However, the FreeBSD
compiler doesn't allow us to recognize undefined symbols, which seem
to get suppressed with the -shared parameter. If the -shared is not passed
we get error messages due to undefined symbols _progname and environ from
libc.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-05 22:33:14 +00:00
Stefan Berger
314f8080d3 build-sys: Fix undefined symbol check on Darwin (OS X)
OS X needs the -shared parameter when running the undefined symbol
check.

Do not fail if a.out was not created, like on Cygwin.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-04 08:43:16 -04:00
Stefan Berger
5c2a46c9f8 travis: use 'distcheck' rather than 'check'
To test the creation of the tar and out-of-tree builds all the time, do
'distcheck' rather than a simple 'check'.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-09-01 11:19:13 -04:00
Stefan Berger
59f46464d5 build-sys: work around broken linker when testing --version-script support
The linker on FreeBSD seems to be broken and fails for other reasons
when testing for support of the --version-script flag. The error
that is reported is:

local symbol 'environ' in /usr/lib/crt1.o is referenced by DSO.

Also __progname is needed.

To work around this problem we add a test.syms file that only has
these two symbols in it, which is enough for the test in
configure.ac and gives version script support in case of the
broken linker.

On FreeBSD TPM 1.2 related tests were failing due to test case 6
failures in case no linker script was used. (Very odd.) This patch
fixes this problem.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-30 21:45:16 +00:00
Stefan Berger
b52c19e171 build-sys: Remove libtpms_tpm2_la_LDFLAGS
Remove libtpms_tpm2_la_LDFLAGS since they are not needed.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-30 17:42:29 -04:00
Stefan Berger
83f8e40ecb tpm2: Make compileable on OS X/Darwin
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-30 14:55:09 -04:00
Stefan Berger
27904459e3 build-sys: Check for supported linker flag --version-script
Check whether the linker supports the linker flag --version-script.
The OS X linkwer does not seem to support it.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-30 13:24:54 -04:00
Stefan Berger
9582b58036 tpm2: activate field 'a' as renamed 'a_unused' in PRC_POLICY
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-30 06:31:10 -04:00
Stefan Berger
b6a89b2f55 build-sys: Use X="$X ..." rather than X+="..." in configure.ac
Some configure interpreters do not like X+="...", so we have to
use X="$X ..." instead.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-29 17:47:25 +00:00
Stefan Berger
83ca1948bc configure.ac: Replace tests with '==' through '='
On NetBSD configure.ac cannot have '==' in tests. So we have to replace them
with '='.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-29 12:12:57 +00:00
Stefan Berger
bdeabedd09 tpm2: Make compileable on NetBSD
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-29 11:52:07 +00:00
Stefan Berger
1c79bff666 tpm2: Make compileable on FreeBSD
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-29 01:07:13 +00:00
Stefan Berger
764dc43dc3 tpm2: Do padding of bytes for i386 via additional bytes in array
Instead of adding padding bytes to the end of the structure
extend the d array with 3 additional entries that are not going
to be used but provide the padding so that the structure has the
same size on 32 bit and 64 bit machines.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-08 18:17:02 -04:00
Stefan Berger
2aed56cc11 tpm2: Fix printf format for 32 bit machines
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-08 12:10:51 -04:00
Stefan Berger
77b11b7eda build-sys: Include autogen.sh in the tarball and use for RPM building
Include the autogen.sh in the tarball and use it for building
the RPM.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-08 08:59:04 -04:00
Stefan Berger
b899d10c18 build-sys: Only remove generated .3 man files
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-03 13:16:22 -04:00
Stefan Berger
38a7d1951f pkg-config: add cryptolib to libtpms.pc
Add the cryptolib libtpms has been compiled with to libtpms.pc[.in]

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-08-03 13:06:29 -04:00
Marc-André Lureau
bb5d837cf8 build-sys: fix make distcheck
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2018-08-02 12:53:20 -04:00
Stefan Berger
1d918e5426 Fix regression from 'Recalculate the entrysize in front of ...'
The patch 'Recalculate the entrysize in front of every USER_NVRAM blob'
did not properly account for the TPM_HANDLE when recalculating the
entry size of an OBJECT in NVRAM. As a consequence all OBJECTS and NVRAM
indices following the first OBJECT got lost.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-07-27 17:22:20 -04:00
Stefan Berger
a5a359f4ca tpm2: Determine which PCR banks need to be restored
Determine which PCR banks need to be restored by determining which PCR banks
are active. We only expect data for active PCR banks and the other ones do
not need data.

The tricky part here is that the TPM 2 maintains a variable that indicates
which PCR banks are active in gp.pcrAllocated and another variable in NVRAM
indicating which ones will become active after a reboot. So far we only saved
the one from NVRAM when marshalling the state but now we have to save the one
holding the current active PCR banks also. The restauration of this variable
needs to happen when we resume the VM with volatile state.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-07-19 17:19:53 -04:00
Stefan Berger
073849aa46 tpm2: Recalculate the entrysize in front of every USER_NVRAM blob
Since the sizeof(TPM_NV_INDEX) and sizeof(OBJECT) may expand when new hash
algorithms are enabled, the size of each entry in the USER_NVRAM may also
expand. We have to account for this when writing the entry size into the
NVRAM and cannot use the one from the unmarshalled state unless it is 0
or the sizes were the same. So the best is to calculate the entry size and
write it again.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-07-17 20:40:45 -04:00
Stefan Berger
3ed7491323 tpm2: Add function to display USER_NVRAM contents
Add a function for displaying the USER_NVRAM contents for debugging.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-07-17 20:40:45 -04:00
Stefan Berger
dbc07c190c tpm2: disable the failure mode on totalResetCount return to 0
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-07-17 20:40:45 -04:00
Stefan Berger
d99e48eac2 NVMarshal: Fix handling of future header version handling
If we come across a header of a verions we don't know
in this implementation we just have to cause a skip.
2018-07-12 20:51:31 -04:00
Stefan Berger
5ddc17e001 tpm2: Use malloc/free rather than TPM_Malloc/TPM_Free
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-20 15:06:03 -04:00
Stefan Berger
1a24bcc550 build: Add missing header files for building RPM from tar file
2 header files were missing in the tar file and the RPM build failed.
This patch adds them.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
1a7902bb6e tpm2: Implement TPM2B_Cmp() to compare to TPM2B's
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
55bcad86f9 library: use __attribute__((format,...) to check printf format and args
Introduce ATTRIBUTE_FORMAT for gcc and clang and use it to check the format
of the printf type function TPMLIB_LogTPM2Error() and the parameters. Fix
several places with errors.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
4c5b050537 tpm2: Add comments to unmarshalling of user NVRAM
The unmarshalling of the user NVRAM checks whether the NVRAM size allows us
to write the data into it. Since this function is called before writing the
other data into it (PERSISTENT DATA, etc. at lower offsets in the NVRAM),
we can be sure that the NVRAM is large enough to fit everything. Following
this logic, we should be able to loosen the restriction on the NVRAM size and
need not check what size the NVRAM was on the originating side. Since we will
test the unmarshalling of all the data we should be able to detect if the
local NVRAM size is too small and refuse to take the blob based on the failure
to unmarshal completely.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
49e2af3ea5 tpm2: Run a compile-time check whether NVRAM is too small
Add a compile-time check for whether the NVRAM is too small.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
eed97cf008 tpm2: adapt NVRAM offsets and check structure sizes
Make sure that the NVRAM offsets and structure sizes are the same
on all architectures so that we can fill up the NVRAM on one system
and migrate the state to another architecture and it will fit into
the NVRAM space there.

We leave some space for the first few data structures in the NVRAM to
grow. We do this by rounding up the NV_INDEX_RAM_DATA location to the
next kb boundary. This moves it from offset 4356 to 5120 on x86_64 and
from offset 4332 to 5120 on i386. This now leaves us with the same
amount of space for user dynamic NVRAM, which starts beyond offset 5120.

We also pad the OBJECT structure with 4 bytes so that it is the same
size on 32 and 64 bit architectures. This is a data structure that
is used in user dynamic NVRAM and should be the same size on all
architectures so that a full NVRAM always fits.

Also test the size of the NV_INDEX structure, which already has the
same size on all tested architectures (x86_64, i386, arm32, ppc64).

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Marc-André Lureau
48dabdbdef tests: add fuzz test
See README for details on how to use.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2018-06-15 18:07:49 -04:00
Marc-André Lureau
ef356d0ddb tests: add an initial corpus for fuzzing
This is taken directly from chromiumos TPM2 repository:

    commit 172eec5ea9b46ddfe720c854fa719fdf8613b4ed
    Author: nagendra modadugu <ngm@google.com>
    Date:   Fri Sep 16 14:07:13 2016 -0700

        Add an initial fuzz test corpus for execute-command

        This commit introduces a minimized corpus for
        the test in fuzz/execute-command.cc.

        The corpus was generated by parsing the TCG test
        suite log for messages sent to the TPM.  The corpus
        includes test cases that produced crashes reported
        in chrome-os-partner:56767 and chrome-os-partner:56825.

        Future work includes defining a dictionary for the
        protocol so that mutations can be more effective,
        and also generating test-cases that improve coverage
        (e.g. create & store primary key, followed by test case).

        BUG=chrome-os-partner:50646
        BRANCH=none
        TEST=follow instructions in fuzz/README

        Change-Id: I24332c0f58996626de9a08e2780595b0b2d76350
        Signed-off-by: nagendra modadugu <ngm@google.com>
        Reviewed-on: https://chromium-review.googlesource.com/386443
        Commit-Ready: Nagendra Modadugu <ngm@google.com>
        Tested-by: Nagendra Modadugu <ngm@google.com>
        Reviewed-by: Kostya Serebryany <kcc@chromium.org>
        Reviewed-by: Mike Aizitsky <aizatsky@chromium.org>
        Reviewed-by: Bill Richardson <wfrichar@chromium.org>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2018-06-15 18:07:49 -04:00
Marc-André Lureau
37ca75c707 build-sys: remove -Wstrict-aliasing=3
The option doesn't exist with clang, and is default with gcc -Wall
already.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2018-06-15 18:07:49 -04:00
Marc-André Lureau
ec0f7ed195 build-sys: move hardening linker flags to ldflags
Fixes unusued flags warnings with clang.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
effd551cfb tpm2: enable sha512 (breaks compatiblity)
Enable SHA512. Since the TPM 2 expects to see PCR values for
the SHA512 bank in some of its structures, this breaks
compatibility with existing state files.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
470d94d242 tpm2: convert rest of structures to write downgradeable state
Also write those structure related to PERSISTENT_ALL to have
a header with version 2 and a tail that allows the state to be
extended and downgraded.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
634db67243 tpm2: tie volatile state of TPM to persistent state
Write the persistent state's EP,SP, and PPSeed values into the
volatile state and check them when reading. This way we can
prevent that arbitrary volatile and persistent state blobs are
used.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
8799e156ba Extend NVRAM memory size to 128kb
Increase the NVRAM memory size to 128kb. That should be it for good.

We accept smaller NVRAM sizes from stored state.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
63ce125c7d Write different header for SHA384 and SHA512 in shared function
SHA512 is currently not enabled since until a short while ago the test
data was missing. So before we enable it, we should differentiate between
writing adn reading of SHA384 and SHA512 data by using a different magic
in the header. We assign the existing value of the magic for the SHA384
that we currently use and assign SHA512 a new value.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
aa51031256 Increase MIN_EVICT_OBJECTS to 7 for value of TPM_PT_HR_PERSISTENT_MIN
Adapt the MIN_EVICT_OBJETCS #define value to 7 so that it meeds to
TPM Profile (PTP) Specification and TPM_PT_HR_PERSISTENT_MIN returns
the proper value.

We allow to read the state from a TPM that had a lesser value before.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
f6ab7aeeb1 Update TpmToOsslMath.c to look similar to latest code
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00
Stefan Berger
8850c55258 Update to latest version: CryptHash.c
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
2018-06-15 18:07:49 -04:00