mirror of
https://github.com/stefanberger/swtpm.git
synced 2025-08-22 19:04:35 +00:00

Some tests are expected to fail. Capture the error output and test it against epected error output. This also makes the test output less noisy. Also remove some other output noise. Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
219 lines
5.6 KiB
Bash
Executable File
219 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# For the license, see the LICENSE file in the root directory.
|
|
#set -x
|
|
|
|
ROOT=${abs_top_builddir:-$(pwd)/..}
|
|
TESTDIR=${abs_top_testdir:-$(dirname "$0")}
|
|
|
|
VTPM_NAME="vtpm-test-hashing2"
|
|
SWTPM_DEV_NAME="/dev/${VTPM_NAME}"
|
|
export TPM_PATH=$(mktemp -d)
|
|
STATE_FILE=$TPM_PATH/tpm-00.permall
|
|
VOLATILE_STATE_FILE=$TPM_PATH/tpm-00.volatilestate
|
|
SWTPM_CMD_UNIX_PATH=${TPM_PATH}/unix-cmd.sock
|
|
SWTPM_CTRL_UNIX_PATH=${TPM_PATH}/unix-ctrl.sock
|
|
SWTPM_INTERFACE=${SWTPM_INTERFACE:-cuse}
|
|
|
|
function cleanup()
|
|
{
|
|
pid=${SWTPM_PID}
|
|
if [ -n "$pid" ]; then
|
|
kill_quiet -9 $pid
|
|
fi
|
|
rm -rf $TPM_PATH
|
|
}
|
|
|
|
trap "cleanup" EXIT
|
|
|
|
[ "${SWTPM_INTERFACE}" == cuse ] && source ${TESTDIR}/test_cuse
|
|
source ${TESTDIR}/common
|
|
|
|
rm -f $STATE_FILE $VOLATILE_STATE_FILE 2>/dev/null
|
|
|
|
run_swtpm ${SWTPM_INTERFACE}
|
|
|
|
display_processes_by_name "$SWTPM"
|
|
|
|
kill_quiet -0 ${SWTPM_PID}
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: ${SWTPM_INTERFACE} TPM did not start."
|
|
exit 1
|
|
fi
|
|
|
|
# Init the TPM
|
|
run_swtpm_ioctl ${SWTPM_INTERFACE} -i
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: ${SWTPM_INTERFACE} TPM initialization failed."
|
|
exit 1
|
|
fi
|
|
|
|
sleep 0.5
|
|
|
|
kill_quiet -0 ${SWTPM_PID} 2>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: ${SWTPM_INTERFACE} TPM not running anymore after INIT."
|
|
exit 1
|
|
fi
|
|
|
|
# Startup the TPM
|
|
swtpm_open_cmddev ${SWTPM_INTERFACE} 100
|
|
RES=$(swtpm_cmd_tx ${SWTPM_INTERFACE} '\x00\xC1\x00\x00\x00\x0C\x00\x00\x00\x99\x00\x01')
|
|
exp=' 00 c4 00 00 00 0a 00 00 00 00'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error: Did not get expected result from TPM_Startup(ST_Clear)"
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
|
|
# Check the TPM Established bit before the hashing
|
|
RES=$(run_swtpm_ioctl ${SWTPM_INTERFACE} -e)
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Could not get the TPM Established flag from the ${SWTPM_INTERFACE} TPM."
|
|
exit 1
|
|
fi
|
|
exp='tpmEstablished is 0'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error (1): TPM Established flag has wrong value."
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
|
|
run_swtpm_ioctl ${SWTPM_INTERFACE} -h 1234
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Hash command did not work."
|
|
exit 1
|
|
fi
|
|
|
|
# Read PCR 17
|
|
swtpm_open_cmddev ${SWTPM_INTERFACE} 100
|
|
RES=$(swtpm_cmd_tx ${SWTPM_INTERFACE} '\x00\xC1\x00\x00\x00\x0E\x00\x00\x00\x15\x00\x00\x00\x11')
|
|
exp=' 00 c4 00 00 00 1e 00 00 00 00 97 e9 76 e4 f2 2c d6 d2 4a fd 21 20 85 ad 7a 86 64 7f 2a e5'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error: (1) Did not get expected result from TPM_PCRRead(17)"
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
|
|
# Check the TPM Established bit after the hashing
|
|
RES=$(run_swtpm_ioctl ${SWTPM_INTERFACE} -e)
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Could not get the TPM Established flag from the ${SWTPM_INTERFACE} TPM."
|
|
exit 1
|
|
fi
|
|
exp='tpmEstablished is 1'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error (2): TPM Established flag has wrong value."
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
|
|
# Reset the establishment bit; we switch to locality 0 and reset via locality 3
|
|
run_swtpm_ioctl ${SWTPM_INTERFACE} -l 0
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Could not set locality 0"
|
|
exit 1
|
|
fi
|
|
|
|
for ((l = 0; l <= 2; l++)); do
|
|
# Resetting via locality 2 must fail
|
|
ERR="$(run_swtpm_ioctl ${SWTPM_INTERFACE} -r $l 2>&1)"
|
|
if [ $? -eq 0 ]; then
|
|
echo "Error: Could reset the establishment bit via locality $l"
|
|
exit 1
|
|
fi
|
|
exp="TPM result from PTM_RESET_TPMESTABLISHED: 0x3d"
|
|
if [ "$ERR" != "$exp" ]; then
|
|
echo "Error: Unexpected error message"
|
|
echo "Received: $ERR"
|
|
echo "Expected: $exp"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# We expect the same results for the TPM_ResetEstablishment command
|
|
for ((l = 0; l <= 2; l++)); do
|
|
# Set locality
|
|
run_swtpm_ioctl ${SWTPM_INTERFACE} -l $l
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Could not choose locality $l"
|
|
exit 1
|
|
fi
|
|
# Have to use external echo command
|
|
swtpm_open_cmddev ${SWTPM_INTERFACE} 100
|
|
RES=$(swtpm_cmd_tx ${SWTPM_INTERFACE} '\x00\xC1\x00\x00\x00\x0a\x40\x00\x00\x0b')
|
|
exp=' 00 c4 00 00 00 0a 00 00 00 3d'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error: Could reset TPM establishment bit in locality $l using command"
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Resetting via locality 3 must work
|
|
run_swtpm_ioctl ${SWTPM_INTERFACE} -l 3
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Could not reset the establishment bit via locality 3"
|
|
exit 1
|
|
fi
|
|
|
|
swtpm_open_cmddev ${SWTPM_INTERFACE} 100
|
|
RES=$(swtpm_cmd_tx ${SWTPM_INTERFACE} '\x00\xC1\x00\x00\x00\x0a\x40\x00\x00\x0b')
|
|
exp=' 00 c4 00 00 00 0a 00 00 00 00'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error: Could reset TPM establishment bit in locality 3 using command"
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
|
|
# Check the TPM Established bit after the reset
|
|
RES=$(run_swtpm_ioctl ${SWTPM_INTERFACE} -e)
|
|
exp='tpmEstablished is 0'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error (3): TPM Established flag has wrong value."
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
|
|
# Read from a file
|
|
dd if=/dev/zero bs=1024 count=1024 2>/dev/null |\
|
|
run_swtpm_ioctl ${SWTPM_INTERFACE} -h -
|
|
|
|
# Read PCR 17
|
|
swtpm_open_cmddev ${SWTPM_INTERFACE} 100
|
|
RES=$(swtpm_cmd_tx ${SWTPM_INTERFACE} '\x00\xC1\x00\x00\x00\x0E\x00\x00\x00\x15\x00\x00\x00\x11')
|
|
exp=' 00 c4 00 00 00 1e 00 00 00 00 d8 0e 7a 7b 3c 37 88 7d b4 c2 88 08 1d a7 53 f6 4b 11 3a 9c'
|
|
if [ "$RES" != "$exp" ]; then
|
|
echo "Error: (2) Did not get expected result from TPM_PCRRead(17)"
|
|
echo "expected: $exp"
|
|
echo "received: $RES"
|
|
exit 1
|
|
fi
|
|
|
|
run_swtpm_ioctl ${SWTPM_INTERFACE} -s
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Could not shut down the ${SWTPM_INTERFACE} TPM."
|
|
exit 1
|
|
fi
|
|
|
|
if wait_process_gone ${SWTPM_PID} 4; then
|
|
echo "Error: ${SWTPM_INTERFACE} TPM should not be running anymore."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -e $STATE_FILE ]; then
|
|
echo "Error: TPM state file $STATE_FILE does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
echo "OK"
|
|
|
|
exit 0
|