blob: a9cb558b653d092ace5776a7f665e9544df83a63 [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*******************************************************************************
* Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
* All rights reserved.
******************************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifndef NO_DL
#include <dlfcn.h>
#endif /* NO_DL */
#include <stdlib.h>
#include<unistd.h>
#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");
}