| #!/usr/bin/env bash |
| |
| # For the license, see the LICENSE file in the root directory. |
| |
| ROOT=${abs_top_builddir:-$(dirname "$0")/..} |
| TESTDIR=${abs_top_testdir:-$(dirname "$0")} |
| |
| TPMDIR=`mktemp -d` |
| SWTPM_CTRL_UNIX_PATH=$TPMDIR/sock |
| PID_FILE=$TPMDIR/swtpm.pid |
| LOG_FILE=$TPMDIR/swtpm.log |
| |
| source ${TESTDIR}/test_common |
| |
| trap "cleanup" SIGTERM EXIT |
| |
| function cleanup() |
| { |
| rm -rf $TPMDIR |
| if [ -n "$PID" ]; then |
| kill_quiet -SIGTERM $PID 2>/dev/null |
| fi |
| } |
| |
| SWTPM_INTERFACE=socket+unix |
| source ${TESTDIR}/common |
| |
| # Test 1: test the control channel on the chardev tpm |
| |
| exec 100<>/dev/ptmx |
| $SWTPM_EXE chardev \ |
| --fd 100 \ |
| --tpmstate dir=$TPMDIR \ |
| --pid file=$PID_FILE \ |
| --ctrl type=unixio,path=$SWTPM_CTRL_UNIX_PATH \ |
| --log file=$LOG_FILE,level=20 \ |
| ${SWTPM_TEST_SECCOMP_OPT} & |
| |
| exec 100>&- |
| |
| if wait_for_file $PID_FILE 3; then |
| echo "Error: Chardev TPM did not write pidfile." |
| exit 1 |
| fi |
| |
| PID="$(cat $PID_FILE)" |
| |
| # Get the capability bits: CMD_GET_CAPABILITY = 0x00 00 00 01 |
| res="$(swtpm_ctrl_tx ${SWTPM_INTERFACE} '\x00\x00\x00\x01')" |
| exp=" 00 00 00 00 00 00 7f ff" |
| if [ "$res" != "$exp" ]; then |
| echo "Error: Unexpected response from CMD_GET_CAPABILITY:" |
| echo " actual : $res" |
| echo " expected: $exp" |
| exit 1 |
| fi |
| |
| # Send TPM_Init to the TPM: CMD_INIT = 0x00 00 00 02 + flags |
| res="$(swtpm_ctrl_tx ${SWTPM_INTERFACE} '\x00\x00\x00\x02\x00\x00\x00\x00')" |
| exp=" 00 00 00 00" |
| if [ "$res" != "$exp" ]; then |
| echo "Error: Unexpected response from CMD_INIT:" |
| echo " actual : $res" |
| echo " expected: $exp" |
| exit 1 |
| fi |
| |
| # Send unknown command to the TPM |
| res="$(swtpm_ctrl_tx ${SWTPM_INTERFACE} '\x00\x00\xff\xff')" |
| exp=" 00 00 00 0a" |
| if [ "$res" != "$exp" ]; then |
| echo "Error: Unexpected response from sending unsupported command:" |
| echo " actual : $res" |
| echo " expected: $exp" |
| exit 1 |
| fi |
| |
| # Save the volatile state: CMD_STORE_VOLATILE = 0x00 00 00 0a |
| res="$(swtpm_ctrl_tx ${SWTPM_INTERFACE} '\x00\x00\x00\x0a')" |
| exp=" 00 00 00 00" |
| if [ "$res" != "$exp" ]; then |
| echo "Error: Unexpected response from CMD_STORE_VOLATILE:" |
| echo " actual : $res" |
| echo " expected: $exp" |
| exit 1 |
| fi |
| |
| if [ ! -r $TPMDIR/tpm-00.volatilestate ]; then |
| echo "Error: Socket TPM: Did not write volatile state file" |
| exit 1 |
| fi |
| |
| # Send stop command to the TPM: CMD_STOP = 00 00 00 0e |
| res="$(swtpm_ctrl_tx ${SWTPM_INTERFACE} '\x00\x00\x00\x0e')" |
| exp=" 00 00 00 00" |
| if [ "$res" != "$exp" ]; then |
| echo "Error: Socket TPM: Unexpected response from CMD_STOP:" |
| echo " actual : $res" |
| echo " expected: $exp" |
| exit 1 |
| fi |
| |
| # Send get config command to the TPM: CMD_GET_CONFIG = 00 00 00 0f |
| res="$(swtpm_ctrl_tx ${SWTPM_INTERFACE} '\x00\x00\x00\x0f')" |
| exp=" 00 00 00 00 00 00 00 00" |
| if [ "$res" != "$exp" ]; then |
| echo "Error: Socket TPM: Unexpected response from CMD_GET_CONFIG:" |
| echo " actual : $res" |
| echo " expected: $exp" |
| exit 1 |
| fi |
| |
| # Send shutdown command to the TPM: CMD_SHUTDOWN = 00 00 00 03 |
| res="$(swtpm_ctrl_tx ${SWTPM_INTERFACE} '\x00\x00\x00\x03')" |
| exp=" 00 00 00 00" |
| if [ "$res" != "$exp" ]; then |
| echo "Error: Unexpected response from CMD_SHUTDOWN:" |
| echo " actual : $res" |
| echo " expected: $exp" |
| exit 1 |
| fi |
| |
| if wait_process_gone ${PID} 4; then |
| echo "Error: TPM should not be running anymore." |
| exit 1 |
| fi |
| |
| if wait_file_gone $PID_FILE 2; then |
| echo "Error: TPM should have removed PID file by now." |
| exit 1 |
| fi |
| |
| check_logfile_patterns_level_20 $LOG_FILE |
| rm -f $LOG_FILE |
| |
| echo "OK" |