/* SPDX-License-Identifier: BSD-2-Clause */ /******************************************************************************* * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG * All rights reserved. ******************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #ifndef NO_DL #include #endif /* NO_DL */ #include #include #include "tss2_fapi.h" #include "tss2_tctildr.h" #include "fapi_int.h" #include "fapi_util.h" #include "tss2_esys.h" #define LOGMODULE fapi #include "util/log.h" #include "util/aux_util.h" /** One-Call function for Fapi_Finalize * * Fapi_Finalize() finalizes a context by closing IPC/RPC connections and freeing * its consumed memory. * * @param[in] context The FAPI_CONTEXT */ void Fapi_Finalize( FAPI_CONTEXT **context) { LOG_TRACE("called for context:%p", context); /* Check for NULL parameters */ if (!context || !*context) { LOG_WARNING("Attempting to free NULL context"); return; } LOG_DEBUG("called: context: %p, *context: %p", context, (context != NULL) ? *context : NULL); /* Finalize the profiles module. */ ifapi_profiles_finalize(&(*context)->profiles); /* Finalize the TCTI and ESYS contexts. */ TSS2_TCTI_CONTEXT *tcti = NULL; if ((*context)->esys) { Esys_GetTcti((*context)->esys, &tcti); Esys_Finalize(&((*context)->esys)); if (tcti) { LOG_TRACE("Finalizing TCTI"); Tss2_TctiLdr_Finalize(&tcti); } } /* Finalize the keystore module. */ ifapi_cleanup_ifapi_keystore(&(*context)->keystore); /* Finalize the policy module. */ SAFE_FREE((*context)->pstore.policydir); /* Finalize leftovers from provisioning. */ SAFE_FREE((*context)->cmd.Provision.root_crt); SAFE_FREE((*context)->cmd.Provision.intermed_crt); SAFE_FREE((*context)->cmd.Provision.pem_cert); /* Finalize the config module. */ SAFE_FREE((*context)->config.profile_dir); SAFE_FREE((*context)->config.user_dir); SAFE_FREE((*context)->config.keystore_dir); SAFE_FREE((*context)->config.profile_name); SAFE_FREE((*context)->config.tcti); SAFE_FREE((*context)->config.log_dir); SAFE_FREE((*context)->config.ek_cert_file); SAFE_FREE((*context)->config.intel_cert_service); /* Finalize the eventlog module. */ SAFE_FREE((*context)->eventlog.log_dir); /* Finalize all remaining object of the context. */ ifapi_free_objects(*context); /* Free the context's memory. */ free(*context); *context = NULL; LOG_DEBUG("finished"); }