diff --git a/kernel/trace/ipc_logging.c b/kernel/trace/ipc_logging.c index fb84c6c9b28e..3bb23b40fe26 100644 --- a/kernel/trace/ipc_logging.c +++ b/kernel/trace/ipc_logging.c @@ -903,6 +903,7 @@ void ipc_log_context_free(struct kref *kref) int ipc_log_context_destroy(void *ctxt) { struct ipc_log_context *ilctxt = (struct ipc_log_context *)ctxt; + struct dfunc_info *df_info = NULL, *tmp = NULL; unsigned long flags; if (!ilctxt) @@ -913,6 +914,10 @@ int ipc_log_context_destroy(void *ctxt) spin_lock(&ilctxt->context_lock_lhb1); ilctxt->destroyed = true; complete_all(&ilctxt->read_avail); + list_for_each_entry_safe(df_info, tmp, &ilctxt->dfunc_info_list, list) { + list_del(&df_info->list); + kfree(df_info); + } spin_unlock(&ilctxt->context_lock_lhb1); write_lock_irqsave(&context_list_lock_lha1, flags);