diff --git a/host/xtest/ftpm_ta.h b/host/xtest/ftpm_ta.h new file mode 100644 index 000000000..1cb6be20c --- /dev/null +++ b/host/xtest/ftpm_ta.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ +/* + * Copyright (c) 2024 Linaro Limited + * + * The copyright in this software is being made available under the BSD License, + * included below. This software may be subject to other third party and + * contributor rights, including patent rights, and no such rights are granted + * under this license. + * + * Copyright (c) 2018 Microsoft Corporation + * + * All rights reserved. + * + * BSD License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef FTPM_TA_H +#define FTPM_TA_H + +/* This UUID is generated with uuidgen */ +#define TA_FTPM_UUID { 0xBC50D971, 0xD4C9, 0x42C4, \ + {0x82, 0xCB, 0x34, 0x3F, 0xB7, 0xF3, 0x78, 0x96}} + +/* The TAFs ID implemented in this TA */ +#define TA_FTPM_SUBMIT_COMMAND (0) +#define TA_FTPM_EMULATE_PPI (1) + +#endif /*FTPM_TA_H*/ diff --git a/host/xtest/regression_1000.c b/host/xtest/regression_1000.c index 9981d01a7..dc30b1e9a 100644 --- a/host/xtest/regression_1000.c +++ b/host/xtest/regression_1000.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -41,6 +42,7 @@ #include #include +#include "ftpm_ta.h" #include "xtest_helpers.h" #include "xtest_test.h" #include "xtest_uuid_helpers.h" @@ -3361,3 +3363,32 @@ static void xtest_tee_test_1040(ADBG_Case_t *c) } ADBG_CASE_DEFINE(regression, 1040, xtest_tee_test_1040, "Test panic in concurrent open/invoke/close session"); + +static void xtest_tee_test_1041(ADBG_Case_t *c) +{ + const char fname[] = "/dev/tpm0"; + TEE_Result res = TEEC_SUCCESS; + TEEC_Session sess = { }; + uint32_t ret_orig = 0; + struct stat sb = { }; + + res = xtest_teec_open_session(&sess, &(const TEEC_UUID)TA_FTPM_UUID, + NULL, &ret_orig); + if (res == TEEC_ERROR_ITEM_NOT_FOUND) { + Do_ADBG_Log("skip test, fTPM TA not present"); + return; + } + if (res != TEEC_ERROR_BUSY && ADBG_EXPECT_TEEC_SUCCESS(c, res)) + TEEC_CloseSession(&sess); + + if (!ADBG_EXPECT_COMPARE_SIGNED(c, stat(fname, &sb), ==, 0)) { + Do_ADBG_Log("stat(\"%s\"): %s", fname, strerror(errno)); + if (res != TEEC_ERROR_BUSY) + Do_ADBG_Log("Perhaps fTPM hasn't finished probing"); + return; + } + + if (!ADBG_EXPECT_TRUE(c, S_ISCHR(sb.st_mode))) + Do_ADBG_Log("Expected \"%s\" to be a character device", fname); +} +ADBG_CASE_DEFINE(regression, 1041, xtest_tee_test_1041, "Test fTPM sanity");