From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAC41384242 for ; Tue, 11 Aug 2026 19:31:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786476676; cv=none; b=HqSqLoTJFnUKTaybg/1GYMVYn7xHOVhsTN796m9OTY1viKhrhIDxw/LXh7SDP7vzhi3sgle4+eljgY2Z/xz7Nj5/1PIBdvI8PU2NaBtYFJZVBi7xviMM0P4NImZ4EvM+OipovSZDsVFdkSANznDdKuh/hLbU34SsDueBZcfZHrw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786476676; c=relaxed/simple; bh=G83xXDloIf57S1yk0IuGDA5v2goMvLjdtmsVA/las00=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=o5mHEEKmUkP1cnI+9fkRJmsaVZvPmznCdtpc77qmlTfTMjBehOdiDtiIlqbdJID30DAE0VjPMlQTS+UIzajvS3ynVZuquhBI7lKRZebqy9RZOX/8ox1Q7ilbNejuzM0eVz5mqYaHZTL3RXQpdqhtGGJeJKYXyTI4vLjnedMP61A= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=B2ss3fnv; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="B2ss3fnv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 904AB1F00A3F; Tue, 11 Aug 2026 19:31:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786476674; bh=mQhPZxosPfEO/rAbnGl3tYC89DT9KJiRE19Gee772aU=; h=Date:From:To:Cc:Subject:References; b=B2ss3fnvpoCOJR/+po04f8VgNLwhBQcwyweHuQZBvC1ltsjfrtkwF2PKNEM1mhaQM g1dpxUlSBZVwF24qWiH4w7FtIAzJAlgcZNlrendCrynsrN4z7t91vWGIcb7+PmJOEY vgLQZT/WqB3eTnDPGwb+O87AQnqPUpWBXLYfWH4Vq1xSuGPkO1KORXUX8PaaJtVL7B w1h3Ga4Nxq7ygx9TjyL7CW3udgZuiw9QTtmDeIh+l09lzIlVoaYYxUVhsFNezeDgE2 KbEHZnKjyEm94jqTDLIqNQntmPkILPGhRmnxwJqVQdX/7ew9Vdos8xSDdwoqF5MMqS XItjqQRuouPyA== Received: from rostedt by gandalf with local (Exim 4.99.4) (envelope-from ) id 1wtsC7-00000002hZs-03tT; Tue, 11 Aug 2026 15:31:27 -0400 Message-ID: <20260811193126.867492731@kernel.org> User-Agent: quilt/0.69 Date: Tue, 11 Aug 2026 15:31:03 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 3/3] tracing: Cleanup event_enable_trigger_parse() by using __free() References: <20260811193100.764585233@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 From: Steven Rostedt The enable_data variable gets freed on most error paths in event_enable_trigger_parse(). Use free() to free it and just before returning normally, call retain_and_null_ptr(enable_data) just before a successful exit to keep it from being freed. On success, the enable_data is assigned to the trigger_data->private_data field. Also add a comment to why event_trigger_free(trigger_data) is being called before a successful exit. Link: https://patch.msgid.link/20260807113558.0ff14e96@gandalf.local.home Reviewed-by: Masami Hiramatsu (Google) Signed-off-by: Steven Rostedt --- kernel/trace/trace_events_trigger.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c index ad83419cb420..149300cc5e8a 100644 --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -1753,7 +1753,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops, char *glob, char *cmd, char *param_and_filter) { struct trace_event_file *event_enable_file; - struct enable_trigger_data *enable_data; + struct enable_trigger_data *enable_data __free(kfree) = NULL; struct event_trigger_data *trigger_data; struct trace_array *tr = file->tr; char *param, *filter; @@ -1803,17 +1803,13 @@ int event_enable_trigger_parse(struct event_command *cmd_ops, enable_data->file = event_enable_file; trigger_data = trigger_data_alloc(cmd_ops, cmd, param, enable_data); - if (!trigger_data) { - kfree(enable_data); + if (!trigger_data) return ret; - } if (remove) { event_trigger_unregister(cmd_ops, file, glob+1, trigger_data); kfree(trigger_data); - kfree(enable_data); - ret = 0; - return ret; + return 0; } /* Up the trigger_data count to make sure nothing frees it on failure */ @@ -1842,7 +1838,12 @@ int event_enable_trigger_parse(struct event_command *cmd_ops, if (ret) goto out_disable; + /* It's now safe to free the reference taken earlier */ event_trigger_free(trigger_data); + + /* The enabled_data is assigned to trigger_data->private_data */ + retain_and_null_ptr(enable_data); + return ret; out_disable: trace_event_enable_disable(event_enable_file, 0, 1); @@ -1851,7 +1852,6 @@ int event_enable_trigger_parse(struct event_command *cmd_ops, out_free: event_trigger_reset_filter(cmd_ops, trigger_data); event_trigger_free(trigger_data); - kfree(enable_data); return ret; } -- 2.53.0