From patchwork Mon Jul 31 23:16:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 128931 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp2353943vqg; Mon, 31 Jul 2023 17:37:47 -0700 (PDT) X-Google-Smtp-Source: APBJJlHJuHxu3EC7vlDDji9jYJeUd0lym62txu26+stigOsBH3VKa8I11Iaqj95jm5uGAc2LcpKQ X-Received: by 2002:a2e:9cd7:0:b0:2b6:d137:b61c with SMTP id g23-20020a2e9cd7000000b002b6d137b61cmr1122519ljj.39.1690850267538; Mon, 31 Jul 2023 17:37:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690850267; cv=none; d=google.com; s=arc-20160816; b=C33rnA/gNOQ85KHJeAc2eGMehQMvzkMefSA6dTdbf5JVfiUh3DTwSvs9Wln+7jGvlQ ZqkVxTw/9d1JtYw39rJQQk9mG2bLXvLU6SPRhlWf9JEQoSI297AhJ1tt5iDTIzdOnp7T n7h+4AK7+2UWl4Swqu/JuNQMWxdMUoLLoHg4A8uxhIb6QVhaywku29JDH1OmiIYZ4QlG qoXYe8HTmq3i70fim8vyWzyMDG9DtShZYrxXrKK+HhErW24EKhyUnckvcBTznu7i4zQq zE+q31QgAq+3k0xmmifN/q2kqWu9m3Z4F3lJwdoPGub+YrZbbH2YlOwYhCYAZfPJMjRp K8dA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=62T2dt1stMCdaiyWk6MDpnsQpMv5ZtTsHry9SKlTGSE=; fh=kgng34H5que7URbu24ZWqKKtWQj+H7d5uaZL8F1DzaU=; b=Mv1uqZw45OppHTButf+zoeX2plzxD7tQUck9zfVw1FCtKz3uSuq70XQA85jx7GQ2O/ zOAh3o1HgUWDF0YciW5XKhr7is/ztFDIci3GvFBEsetAAUEyo9GbEmRW2d2DzbJtvC+N i0Hd2/DQqCm/TjWaFPshH/XRWvvs9vKjCjWcOQ6bC+ehlg8IpbROH3tGorPfBtpgjZkG wFycuiNPkIXUrSfFy9EslhS0QwKWYegBsQRwGDna2s1hEYQuPdEK9xE/UzFa6WlIJzpB akr7UQE3aNFXmSBFP1nWGjNlCpv7Mno9LMQQgp7Qznr/eeHn4rryDKD+xVuyZwHjXITm DCWg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i3-20020a170906850300b0099bd667fcf1si7469699ejx.776.2023.07.31.17.37.23; Mon, 31 Jul 2023 17:37:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231916AbjGaXR3 (ORCPT + 99 others); Mon, 31 Jul 2023 19:17:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39992 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231869AbjGaXRQ (ORCPT ); Mon, 31 Jul 2023 19:17:16 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A9BA1BEE for ; Mon, 31 Jul 2023 16:17:08 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 7E03E6135C for ; Mon, 31 Jul 2023 23:17:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EB88CC43395; Mon, 31 Jul 2023 23:17:06 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.96) (envelope-from ) id 1qQc8P-003fLx-2n; Mon, 31 Jul 2023 19:17:05 -0400 Message-ID: <20230731231705.683094817@goodmis.org> User-Agent: quilt/0.66 Date: Mon, 31 Jul 2023 19:16:38 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Andrew Morton Subject: [for-next][PATCH 04/15] tracing: Add free_trace_iter_content() helper function References: <20230731231634.031452225@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772985010193701437 X-GMAIL-MSGID: 1772985010193701437 From: "Steven Rostedt (Google)" As the trace iterator is created and used by various interfaces, the clean up of it needs to be consistent. Create a free_trace_iter_content() helper function that frees the content of the iterator and use that to clean it up in all places that it is used. Link: https://lkml.kernel.org/r/20230715141348.341887497@goodmis.org Cc: Mark Rutland Cc: Andrew Morton Signed-off-by: Steven Rostedt (Google) Reviewed-by: Masami Hiramatsu (Google) Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 5e665c356df7..a3c4f9826872 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -4799,6 +4799,25 @@ static const struct seq_operations tracer_seq_ops = { .show = s_show, }; +/* + * Note, as iter itself can be allocated and freed in different + * ways, this function is only used to free its content, and not + * the iterator itself. The only requirement to all the allocations + * is that it must zero all fields (kzalloc), as freeing works with + * ethier allocated content or NULL. + */ +static void free_trace_iter_content(struct trace_iterator *iter) +{ + /* The fmt is either NULL, allocated or points to static_fmt_buf */ + if (iter->fmt != static_fmt_buf) + kfree(iter->fmt); + + kfree(iter->temp); + kfree(iter->buffer_iter); + mutex_destroy(&iter->mutex); + free_cpumask_var(iter->started); +} + static struct trace_iterator * __tracing_open(struct inode *inode, struct file *file, bool snapshot) { @@ -4906,8 +4925,7 @@ __tracing_open(struct inode *inode, struct file *file, bool snapshot) fail: mutex_unlock(&trace_types_lock); - kfree(iter->temp); - kfree(iter->buffer_iter); + free_trace_iter_content(iter); release: seq_release_private(inode, file); return ERR_PTR(-ENOMEM); @@ -4986,11 +5004,7 @@ static int tracing_release(struct inode *inode, struct file *file) mutex_unlock(&trace_types_lock); - mutex_destroy(&iter->mutex); - free_cpumask_var(iter->started); - kfree(iter->fmt); - kfree(iter->temp); - kfree(iter->buffer_iter); + free_trace_iter_content(iter); seq_release_private(inode, file); return 0; @@ -6747,10 +6761,7 @@ static int tracing_release_pipe(struct inode *inode, struct file *file) mutex_unlock(&trace_types_lock); - free_cpumask_var(iter->started); - kfree(iter->fmt); - kfree(iter->temp); - mutex_destroy(&iter->mutex); + free_trace_iter_content(iter); kfree(iter); trace_array_put(tr);