1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */ 2*758e9fbaSOystein Eftevaag /*********************************************************************** 3*758e9fbaSOystein Eftevaag * Copyright (c) 2018, Intel Corporation 4*758e9fbaSOystein Eftevaag * 5*758e9fbaSOystein Eftevaag * All rights reserved. 6*758e9fbaSOystein Eftevaag ***********************************************************************/ 7*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H 8*758e9fbaSOystein Eftevaag #include <config.h> 9*758e9fbaSOystein Eftevaag #endif 10*758e9fbaSOystein Eftevaag 11*758e9fbaSOystein Eftevaag #include <stdbool.h> 12*758e9fbaSOystein Eftevaag #include <stdlib.h> 13*758e9fbaSOystein Eftevaag 14*758e9fbaSOystein Eftevaag #define LOGMODULE test 15*758e9fbaSOystein Eftevaag extern "C" { 16*758e9fbaSOystein Eftevaag #include "tss2_sys.h" 17*758e9fbaSOystein Eftevaag #include "tss2_tcti.h" 18*758e9fbaSOystein Eftevaag #include "util/log.h" 19*758e9fbaSOystein Eftevaag #include "test.h" 20*758e9fbaSOystein Eftevaag #include "test-options.h" 21*758e9fbaSOystein Eftevaag #include "context-util.h" 22*758e9fbaSOystein Eftevaag #include "tss2-sys/sysapi_util.h" 23*758e9fbaSOystein Eftevaag #include "tcti/tcti-fuzzing.h" 24*758e9fbaSOystein Eftevaag } 25*758e9fbaSOystein Eftevaag 26*758e9fbaSOystein Eftevaag extern "C" 27*758e9fbaSOystein Eftevaag int LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)28*758e9fbaSOystein EftevaagLLVMFuzzerTestOneInput ( 29*758e9fbaSOystein Eftevaag const uint8_t *Data, 30*758e9fbaSOystein Eftevaag size_t Size) 31*758e9fbaSOystein Eftevaag { 32*758e9fbaSOystein Eftevaag int ret; 33*758e9fbaSOystein Eftevaag TSS2_SYS_CONTEXT *sapi_context; 34*758e9fbaSOystein Eftevaag _TSS2_SYS_CONTEXT_BLOB *ctx = NULL; 35*758e9fbaSOystein Eftevaag TSS2_TCTI_FUZZING_CONTEXT *tcti_fuzzing = NULL; 36*758e9fbaSOystein Eftevaag 37*758e9fbaSOystein Eftevaag /* Use the fuzzing tcti */ 38*758e9fbaSOystein Eftevaag test_opts_t opts = { 39*758e9fbaSOystein Eftevaag .tcti_type = FUZZING_TCTI, 40*758e9fbaSOystein Eftevaag .device_file = DEVICE_PATH_DEFAULT, 41*758e9fbaSOystein Eftevaag .socket_address = HOSTNAME_DEFAULT, 42*758e9fbaSOystein Eftevaag .socket_port = PORT_DEFAULT, 43*758e9fbaSOystein Eftevaag }; 44*758e9fbaSOystein Eftevaag 45*758e9fbaSOystein Eftevaag get_test_opts_from_env (&opts); 46*758e9fbaSOystein Eftevaag if (sanity_check_test_opts (&opts) != 0) { 47*758e9fbaSOystein Eftevaag LOG_ERROR("Checking test options"); 48*758e9fbaSOystein Eftevaag exit(1); /* fatal error */ 49*758e9fbaSOystein Eftevaag } 50*758e9fbaSOystein Eftevaag 51*758e9fbaSOystein Eftevaag sapi_context = sapi_init_from_opts (&opts); 52*758e9fbaSOystein Eftevaag if (sapi_context == NULL) { 53*758e9fbaSOystein Eftevaag LOG_ERROR("SAPI context not initialized"); 54*758e9fbaSOystein Eftevaag exit(1); /* fatal error */ 55*758e9fbaSOystein Eftevaag } 56*758e9fbaSOystein Eftevaag 57*758e9fbaSOystein Eftevaag ctx = syscontext_cast (sapi_context); 58*758e9fbaSOystein Eftevaag tcti_fuzzing = tcti_fuzzing_context_cast (ctx->tctiContext); 59*758e9fbaSOystein Eftevaag tcti_fuzzing->data = Data; 60*758e9fbaSOystein Eftevaag tcti_fuzzing->size = Size; 61*758e9fbaSOystein Eftevaag 62*758e9fbaSOystein Eftevaag ret = test_invoke (sapi_context); 63*758e9fbaSOystein Eftevaag 64*758e9fbaSOystein Eftevaag sapi_teardown_full (sapi_context); 65*758e9fbaSOystein Eftevaag 66*758e9fbaSOystein Eftevaag if (ret) { 67*758e9fbaSOystein Eftevaag LOG_ERROR("Test failed"); 68*758e9fbaSOystein Eftevaag exit(1); /* fatal error */ 69*758e9fbaSOystein Eftevaag } 70*758e9fbaSOystein Eftevaag 71*758e9fbaSOystein Eftevaag return 0; // Non-zero return values are reserved for future use. 72*758e9fbaSOystein Eftevaag } 73