From patchwork Sat Jul 15 14:12:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 120800 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c923:0:b0:3e4:2afc:c1 with SMTP id j3csp204754vqt; Sat, 15 Jul 2023 07:46:39 -0700 (PDT) X-Google-Smtp-Source: APBJJlH6ML77X6iOS85uZP+pDKoltnHtMyyNqEuanBSH2vSihdTnJZRm1m9wGESzdZZZUzADWpxk X-Received: by 2002:a05:6512:247:b0:4f8:7960:f72 with SMTP id b7-20020a056512024700b004f879600f72mr4587939lfo.44.1689432398705; Sat, 15 Jul 2023 07:46:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689432398; cv=none; d=google.com; s=arc-20160816; b=Fo3/026jnobecbH9aXgsxaTodhRDIBB+tmWIM3MMDkqouocJ6W5EuoQ1RCU8LJjPT9 ajKAulYsD9WTH5ejOLSfTm9pzH1K7cnq2K5Fzg+ptz/0tyid7w4Z6kb5bV8GRWX6McP8 Ue/RIl3/Wrx9GcxXmhdv4vO/1Qolls5W/hML+q3uyDVxmnPbc+WAUItVhqQ1b2e2fus6 ZuhG006+ZifKSvs5ftMhU+XjwHd03VGw8QjE7noBDZRTWeKr4V/buT75vapXrX7CEe2J Me4BdshDEPW4B614jnv+KCKqp0ZaRI7REmD1kbNZuIGpRTVJiBbfXt86o6l7Acb/NPAK VkmQ== 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=HE+lmiV4v+aoJ2dGYMSL/sBNsi8F9XPA5Use5+RR85M=; fh=ST8jSSvP817CUTShQq7KX/jX436RioQu2dYbRCsWhEU=; b=AHsVJSmBjKXnG1T0sp3jXcJ8kSQHdb1ZHXnzPrCW1+9UMjH+SGIEMdEZjKu4LFnLk7 3GhFYWH2peV0a9QfZdx8sS8ZIm0gZTQi2QxRIB0WifepoabFs7SqjKj4MGj4P1IRm4a2 fFkKJlmqS1cwmBhtIc1Rk/iHW9GnuYS9TO2Dp2XTyuxMvnXrSmf9bQUeqW7Hen2AYTht PFOGpibK8t9b3nRb8WUYukaoapLIsQIaCuZ/HM/02ZI2wWLTpaGNISbGRRJG6qts7WaV anyqQmsrbGbsxp5hACb+ALGwxq5ldr0rceSUcE8wyAialcAPmYURfjm4mDiJJVO66pRP gOgQ== 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 g25-20020aa7d1d9000000b0051e1688dd92si11010386edp.566.2023.07.15.07.46.15; Sat, 15 Jul 2023 07:46:38 -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 S230111AbjGOON7 (ORCPT + 99 others); Sat, 15 Jul 2023 10:13:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230077AbjGOONw (ORCPT ); Sat, 15 Jul 2023 10:13:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A4121BFA; Sat, 15 Jul 2023 07:13:50 -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 1F17160BBB; Sat, 15 Jul 2023 14:13:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 852F9C433CB; Sat, 15 Jul 2023 14:13:49 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.96) (envelope-from ) id 1qKg1s-001040-1h; Sat, 15 Jul 2023 10:13:48 -0400 Message-ID: <20230715141348.341887497@goodmis.org> User-Agent: quilt/0.66 Date: Sat, 15 Jul 2023 10:12:15 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Andrew Morton Subject: [PATCH v2 2/2] tracing: Add free_trace_iter_content() helper function References: <20230715141213.970003974@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no 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: 1771498266733364118 X-GMAIL-MSGID: 1771498266733364118 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. Signed-off-by: Steven Rostedt (Google) Reviewed-by: Masami Hiramatsu (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 1c370ffbe062..8775930aa545 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -4815,6 +4815,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) { @@ -4922,8 +4941,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); @@ -5002,11 +5020,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; @@ -6763,10 +6777,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);