From nobody Mon Oct 6 10:14:38 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 429BD19CC3D; Wed, 23 Jul 2025 01:30:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234251; cv=none; b=ZNXF0ZJIhOnfDhjFXnz02pDAseucswL3yKVwHsVWIhb9DtrJgFIR5bqx4/JiuEMj91GGUpz3uoLGu+73SKqTs0pACPRubEnSOQupPSRrSB+92f766ieCErJf06R0+qdvBwtafEE39IaIc8gZYm8oRKUuLBChX9BRbkA5sUZNzfU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234251; c=relaxed/simple; bh=9/BE9hurBedeM2z86Blmg+TQ7LrJEFOGlOX5tOPf8rM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TsN57IEIpT3il8OxVjd3RQausVOTfdzh1y52OOU8BujZ7g0nCF6Ez3wW06xFnVIE6VGOZhL0gNf0AYKh0su4l5pFgjTl2rlr7G0nDa7/Xd/p1D6pbvzubtps29C0n6YTEA5dD7JhA/ipsykkrt0ul+4dQiapWefmfXWSvW/Kxz8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kaZh6/zL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kaZh6/zL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C834BC4CEEB; Wed, 23 Jul 2025 01:30:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753234251; bh=9/BE9hurBedeM2z86Blmg+TQ7LrJEFOGlOX5tOPf8rM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kaZh6/zLZa5TUN+NEdk9fvrxhR9Bd0ufU2BQvm71NgG3/0iMY+CAsVj6ct8Pg6D7I zFcidNVt9wYP7hCl47R+P66/nnSZXmkXAp0M7KymDRoYLgqykXMXwQ0ffPS58JRtvr /+eTUipaAdQGsGkaqR8ET+Yk1PxcZSqeOWtg/fs7zwABsRxBWzlbaTR8bb+hqoVYHo XDFihW83yWNvcTsrzhLITkIswvpQJVyHStlpnvyqIau2k8e20AzPy0Oii3kJt/N4Oo Uq35NrboavvxRobTpcJdm0Kv6R2yNUeecRyGZUVsr2H8e5xgPWokLYTu7sFoafeUk9 NqqLiSvyGzsQA== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH v4 1/7] tracing: probes: Sort #include alphabetically Date: Wed, 23 Jul 2025 10:30:47 +0900 Message-ID: <175323424678.57270.11975372127870059007.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175323423662.57270.14650807176845939538.stgit@devnote2> References: <175323423662.57270.14650807176845939538.stgit@devnote2> User-Agent: StGit/0.19 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" Content-Transfer-Encoding: quoted-printable From: Masami Hiramatsu (Google) Sort the #include directives in trace_probe* files alphabetically for easier maintenance and avoid double includes. This also groups headers as linux-generic, asm-generic, and local headers. Signed-off-by: Masami Hiramatsu (Google) --- Changes in v3: - Newly added. --- kernel/trace/trace_eprobe.c | 4 ++-- kernel/trace/trace_fprobe.c | 3 ++- kernel/trace/trace_kprobe.c | 8 ++++---- kernel/trace/trace_probe.c | 2 +- kernel/trace/trace_probe.h | 17 +++++++++-------- kernel/trace/trace_uprobe.c | 12 ++++++------ 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 916555f0de81..23e06712bead 100644 --- a/kernel/trace/trace_eprobe.c +++ b/kernel/trace/trace_eprobe.c @@ -9,14 +9,14 @@ * Copyright (C) 2021, VMware Inc, Tzvetomir Stoyanov tz.stoyanov@gmail.co= m> * */ +#include #include #include -#include =20 #include "trace_dynevent.h" #include "trace_probe.h" -#include "trace_probe_tmpl.h" #include "trace_probe_kernel.h" +#include "trace_probe_tmpl.h" =20 #define EPROBE_EVENT_SYSTEM "eprobes" =20 diff --git a/kernel/trace/trace_fprobe.c b/kernel/trace/trace_fprobe.c index dbf9d413125a..add08ffb04d7 100644 --- a/kernel/trace/trace_fprobe.c +++ b/kernel/trace/trace_fprobe.c @@ -4,7 +4,6 @@ * Copyright (C) 2022 Google LLC. */ #define pr_fmt(fmt) "trace_fprobe: " fmt -#include =20 #include #include @@ -15,6 +14,8 @@ #include #include =20 +#include + #include "trace_dynevent.h" #include "trace_probe.h" #include "trace_probe_kernel.h" diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 3e5c47b6d7b2..cac128a5f7e0 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -9,19 +9,19 @@ =20 #include #include -#include +#include #include -#include #include -#include +#include +#include =20 #include /* for COMMAND_LINE_SIZE */ =20 #include "trace_dynevent.h" #include "trace_kprobe_selftest.h" #include "trace_probe.h" -#include "trace_probe_tmpl.h" #include "trace_probe_kernel.h" +#include "trace_probe_tmpl.h" =20 #define KPROBE_EVENT_SYSTEM "kprobes" #define KRETPROBE_MAXACTIVE_MAX 4096 diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index abfab8957a6c..9d26d901c9e5 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -13,8 +13,8 @@ =20 #include #include -#include "trace_btf.h" =20 +#include "trace_btf.h" #include "trace_probe.h" =20 #undef C diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index 854e5668f5ee..719604855279 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -10,20 +10,21 @@ * Author: Srikar Dronamraju */ =20 +#include +#include +#include +#include +#include +#include #include #include #include -#include -#include #include -#include -#include -#include #include -#include +#include +#include #include -#include -#include + #include =20 #include "trace.h" diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index f95a2c3d5b1b..3cc3404b09f0 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -8,16 +8,16 @@ #define pr_fmt(fmt) "trace_uprobe: " fmt =20 #include -#include #include +#include #include -#include -#include #include -#include -#include -#include #include +#include +#include +#include +#include +#include =20 #include "trace_dynevent.h" #include "trace_probe.h" From nobody Mon Oct 6 10:14:38 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 411AA1D63F0; Wed, 23 Jul 2025 01:31:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234261; cv=none; b=LKqS8sfu+NPbXls1F8L+V4lT4mBOvE591V337c0i8oogw0R+8sdsWjgSzorxCbbwW37UR2X27QfBa3vewxKtWEHvxWOtxlIRbaeSHzC1MN6b26U0wiejhrT3JB4sTRXwrmSVmLWXx0wlLxS+NIzZTYc7dLDbYxLDAc/wlo/WGqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234261; c=relaxed/simple; bh=VtZlCmcOqkyOJN941BewJUMCtimGRtGIU3j97zXjTm8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ua7R8NpYYjo55w3sMtFNJ7Sk4Nn9hZGmBStR3o95q1z101MLRxEk9LXndY3BtYDManF1Rm6QGB6zcSyB1Lamnvo7tQPFHLQxDQVw66iLeuLjuyKsRSEusi9TwcvZcQHG2yakcL+YT8DV6pINYi5OyJ4Q7QTHZozwQXeNiff6IQM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X3XV0szR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X3XV0szR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9EB43C4CEEB; Wed, 23 Jul 2025 01:30:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753234260; bh=VtZlCmcOqkyOJN941BewJUMCtimGRtGIU3j97zXjTm8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X3XV0szRb+xtV9QlC7zu8jrMwd7x4ikJafwW4Qu2c6TaOS+Iu8Vv+DWMuGAanZIaj /I2/Tx7KWeAq+m983LS7Qa7EWoaSRAhHBrGPQaATd9KcIJWCv6BTLmp/Vxh3PJ4Ynf if3VVRoTyhJjI+Qs4OzEZvTf5/6Wwv4LrEuzveF8v7MPd8PO2cIgTE5Rhq5PUqcPb/ +6fzTiDxiEIMVt5oAGwDFYuryKieIlqfybfqC0DqECZjVWgTuAmDJ/Be1ogab/NRk2 R1m/ri4hNkTvpzo3DzIjr5PeH03XukuIJgWciX3h4u9zJ6gNPHACqL+I9n1NxGzQfw VD8leDqPNUigA== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH v4 2/7] tracing: probe: Allocate traceprobe_parse_context from heap Date: Wed, 23 Jul 2025 10:30:56 +0900 Message-ID: <175323425650.57270.280750740753792504.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175323423662.57270.14650807176845939538.stgit@devnote2> References: <175323423662.57270.14650807176845939538.stgit@devnote2> User-Agent: StGit/0.19 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" Content-Transfer-Encoding: quoted-printable From: Masami Hiramatsu (Google) Instead of allocating traceprobe_parse_context on stack, allocate it dynamically from heap (slab). This change is likely intended to prevent potential stack overflow issues, which can be a concern in the kernel environment where stack space is limited. Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202506240416.nZIhDXoO-lkp@int= el.com/ Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Steven Rostedt (Google) --- Changes in v3: - Split #include sorting. Changes in v2: - Sort #include alphabetically. - Just NULL check for freeing traceprobe_parse_context. - Do not change the semantics of traceprobe_parse_context for uprobe event. (alloc/free in loop) --- kernel/trace/trace_eprobe.c | 14 ++++++++------ kernel/trace/trace_fprobe.c | 13 ++++++++----- kernel/trace/trace_kprobe.c | 10 +++++++--- kernel/trace/trace_probe.h | 9 +++++++++ kernel/trace/trace_uprobe.c | 13 ++++++++----- 5 files changed, 40 insertions(+), 19 deletions(-) diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 23e06712bead..7ba3a18be4c5 100644 --- a/kernel/trace/trace_eprobe.c +++ b/kernel/trace/trace_eprobe.c @@ -797,18 +797,20 @@ find_and_get_event(const char *system, const char *ev= ent_name) =20 static int trace_eprobe_tp_update_arg(struct trace_eprobe *ep, const char = *argv[], int i) { - struct traceprobe_parse_context ctx =3D { - .event =3D ep->event, - .flags =3D TPARG_FL_KERNEL | TPARG_FL_TEVENT, - }; + struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) =3D= NULL; int ret; =20 - ret =3D traceprobe_parse_probe_arg(&ep->tp, i, argv[i], &ctx); + ctx =3D kzalloc(sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + ctx->event =3D ep->event; + ctx->flags =3D TPARG_FL_KERNEL | TPARG_FL_TEVENT; + + ret =3D traceprobe_parse_probe_arg(&ep->tp, i, argv[i], ctx); /* Handle symbols "@" */ if (!ret) ret =3D traceprobe_update_arg(&ep->tp.args[i]); =20 - traceprobe_finish_parse(&ctx); return ret; } =20 diff --git a/kernel/trace/trace_fprobe.c b/kernel/trace/trace_fprobe.c index add08ffb04d7..610f8d53be8a 100644 --- a/kernel/trace/trace_fprobe.c +++ b/kernel/trace/trace_fprobe.c @@ -1384,14 +1384,17 @@ static int trace_fprobe_create_internal(int argc, c= onst char *argv[], =20 static int trace_fprobe_create_cb(int argc, const char *argv[]) { - struct traceprobe_parse_context ctx =3D { - .flags =3D TPARG_FL_KERNEL | TPARG_FL_FPROBE, - }; + struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) =3D= NULL; int ret; =20 + ctx =3D kzalloc(sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + ctx->flags =3D TPARG_FL_KERNEL | TPARG_FL_FPROBE, + trace_probe_log_init("trace_fprobe", argc, argv); - ret =3D trace_fprobe_create_internal(argc, argv, &ctx); - traceprobe_finish_parse(&ctx); + ret =3D trace_fprobe_create_internal(argc, argv, ctx); trace_probe_log_clear(); return ret; } diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index cac128a5f7e0..d14b33e205f7 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -1065,14 +1065,18 @@ static int trace_kprobe_create_internal(int argc, c= onst char *argv[], =20 static int trace_kprobe_create_cb(int argc, const char *argv[]) { - struct traceprobe_parse_context ctx =3D { .flags =3D TPARG_FL_KERNEL }; + struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) =3D= NULL; int ret; =20 + ctx =3D kzalloc(sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + ctx->flags =3D TPARG_FL_KERNEL; + trace_probe_log_init("trace_kprobe", argc, argv); =20 - ret =3D trace_kprobe_create_internal(argc, argv, &ctx); + ret =3D trace_kprobe_create_internal(argc, argv, ctx); =20 - traceprobe_finish_parse(&ctx); trace_probe_log_clear(); return ret; } diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index 719604855279..842383fbc03b 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -12,6 +12,7 @@ =20 #include #include +#include #include #include #include @@ -439,6 +440,14 @@ extern void traceprobe_free_probe_arg(struct probe_arg= *arg); * this MUST be called for clean up the context and return a resource. */ void traceprobe_finish_parse(struct traceprobe_parse_context *ctx); +static inline void traceprobe_free_parse_ctx(struct traceprobe_parse_conte= xt *ctx) +{ + traceprobe_finish_parse(ctx); + kfree(ctx); +} + +DEFINE_FREE(traceprobe_parse_context, struct traceprobe_parse_context *, + if (_T) traceprobe_free_parse_ctx(_T)) =20 extern int traceprobe_split_symbol_offset(char *symbol, long *offset); int traceprobe_parse_event_name(const char **pevent, const char **pgroup, diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 3cc3404b09f0..872dce092e46 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -695,13 +695,16 @@ static int __trace_uprobe_create(int argc, const char= **argv) =20 /* parse arguments */ for (i =3D 0; i < argc; i++) { - struct traceprobe_parse_context ctx =3D { - .flags =3D (is_return ? TPARG_FL_RETURN : 0) | TPARG_FL_USER, - }; + struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) + =3D kzalloc(sizeof(*ctx), GFP_KERNEL); =20 + if (!ctx) { + ret =3D -ENOMEM; + goto error; + } + ctx->flags =3D (is_return ? TPARG_FL_RETURN : 0) | TPARG_FL_USER; trace_probe_log_set_index(i + 2); - ret =3D traceprobe_parse_probe_arg(&tu->tp, i, argv[i], &ctx); - traceprobe_finish_parse(&ctx); + ret =3D traceprobe_parse_probe_arg(&tu->tp, i, argv[i], ctx); if (ret) goto error; } From nobody Mon Oct 6 10:14:38 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 60BE618A6A7; Wed, 23 Jul 2025 01:31:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234271; cv=none; b=m7urqKf3FaPeMpeC5VCs+FZFqIzR8wXq7/al7tW7q5bpz9P4x1O+F9MHjl0AiT6Jty8RKfmtm82B5mdLBGQ3D2Iy8m9iQUgHs5eLAqwP459YTGY6fU0NfBTTSFbgC3gditmQYXKXTKunSS41i6RCUYCWUcEqyRRQhK0ERDXFFGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234271; c=relaxed/simple; bh=oCXlNSKRLrIZUtDs78uGqslRmQt0ZVedRl6AtLEJ8L0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lx54/syKIkCpUx1fbnFl1DoJ/zKoR+v1ebDmm72YVs9FNuKnsmvOZ3QsQIKFTlHH3XNg9+IMqjPL8P4dFD7iARSVFyICgepqg1FWAxN1IZE81tgriBJ0Iqyc8n0ckIte3whdw0BOgxeKHHke/+yqQxn+Jlw1PTkDZ41xJmSgy34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=i7YpgvmZ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="i7YpgvmZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 754C1C4CEEB; Wed, 23 Jul 2025 01:31:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753234270; bh=oCXlNSKRLrIZUtDs78uGqslRmQt0ZVedRl6AtLEJ8L0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i7YpgvmZJJoPddQGsFacMSUhwcOuQvHj1FNawNA4a3i579xkx2PF5hdaCqu64WBvD 5RoOV6GG9VYPOjyj0JWmH90MzJfPjZgEbsCyQFQsuQe7Wl+OZIFJDy1LONaiigZ5xE ghwWdDGwvq7FOOEyogNfZfScKAAAxyhtbAKgLpPHRKH9Gsx0+dk39U1RfbNj8yjLcg 39TD9ySy5zhm75SHxFlSvTppGKYj4uc5cBu202BZrgSThVEgKZUN7Q4/0cmaMQ2vhg QdWeHCKObqsHR9hHbpg0sCMPZY4WdkXj4T6bWWhV/uXRUe+/U0Fv+ARjuXBMWhVBXZ UdxMsFybOKWBw== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH v4 3/7] tracing: fprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 10:31:06 +0900 Message-ID: <175323426643.57270.6657152008331160704.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175323423662.57270.14650807176845939538.stgit@devnote2> References: <175323423662.57270.14650807176845939538.stgit@devnote2> User-Agent: StGit/0.19 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" Content-Transfer-Encoding: quoted-printable From: Masami Hiramatsu (Google) Allocate temporary string buffers for fprobe-event from heap instead of stack. This fixes the stack frame exceed limit error. Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202506240416.nZIhDXoO-lkp@int= el.com/ Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Steven Rostedt (Google) --- kernel/trace/trace_fprobe.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/kernel/trace/trace_fprobe.c b/kernel/trace/trace_fprobe.c index 610f8d53be8a..9d14a910fbf7 100644 --- a/kernel/trace/trace_fprobe.c +++ b/kernel/trace/trace_fprobe.c @@ -1235,18 +1235,18 @@ static int trace_fprobe_create_internal(int argc, c= onst char *argv[], * FETCHARG:TYPE : use TYPE instead of unsigned long. */ struct trace_fprobe *tf __free(free_trace_fprobe) =3D NULL; - struct module *mod __free(module_put) =3D NULL; - int i, new_argc =3D 0, ret =3D 0; - bool is_return =3D false; - char *symbol __free(kfree) =3D NULL; const char *event =3D NULL, *group =3D FPROBE_EVENT_SYSTEM; + struct module *mod __free(module_put) =3D NULL; const char **new_argv __free(kfree) =3D NULL; - char buf[MAX_EVENT_NAME_LEN]; - char gbuf[MAX_EVENT_NAME_LEN]; - char sbuf[KSYM_NAME_LEN]; - char abuf[MAX_BTF_ARGS_LEN]; + char *symbol __free(kfree) =3D NULL; + char *ebuf __free(kfree) =3D NULL; + char *gbuf __free(kfree) =3D NULL; + char *sbuf __free(kfree) =3D NULL; + char *abuf __free(kfree) =3D NULL; char *dbuf __free(kfree) =3D NULL; + int i, new_argc =3D 0, ret =3D 0; bool is_tracepoint =3D false; + bool is_return =3D false; =20 if ((argv[0][0] !=3D 'f' && argv[0][0] !=3D 't') || argc < 2) return -ECANCELED; @@ -1274,6 +1274,9 @@ static int trace_fprobe_create_internal(int argc, con= st char *argv[], =20 trace_probe_log_set_index(0); if (event) { + gbuf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!gbuf) + return -ENOMEM; ret =3D traceprobe_parse_event_name(&event, &group, gbuf, event - argv[0]); if (ret) @@ -1281,15 +1284,18 @@ static int trace_fprobe_create_internal(int argc, c= onst char *argv[], } =20 if (!event) { + ebuf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!ebuf) + return -ENOMEM; /* Make a new event name */ if (is_tracepoint) - snprintf(buf, MAX_EVENT_NAME_LEN, "%s%s", + snprintf(ebuf, MAX_EVENT_NAME_LEN, "%s%s", isdigit(*symbol) ? "_" : "", symbol); else - snprintf(buf, MAX_EVENT_NAME_LEN, "%s__%s", symbol, + snprintf(ebuf, MAX_EVENT_NAME_LEN, "%s__%s", symbol, is_return ? "exit" : "entry"); - sanitize_event_name(buf); - event =3D buf; + sanitize_event_name(ebuf); + event =3D ebuf; } =20 if (is_return) @@ -1305,13 +1311,20 @@ static int trace_fprobe_create_internal(int argc, c= onst char *argv[], ctx->flags |=3D TPARG_FL_TPOINT; mod =3D NULL; tpoint =3D find_tracepoint(symbol, &mod); - if (tpoint) + if (tpoint) { + sbuf =3D kmalloc(KSYM_NAME_LEN, GFP_KERNEL); + if (!sbuf) + return -ENOMEM; ctx->funcname =3D kallsyms_lookup((unsigned long)tpoint->probestub, NULL, NULL, NULL, sbuf); + } } if (!ctx->funcname) ctx->funcname =3D symbol; =20 + abuf =3D kmalloc(MAX_BTF_ARGS_LEN, GFP_KERNEL); + if (!abuf) + return -ENOMEM; argc -=3D 2; argv +=3D 2; new_argv =3D traceprobe_expand_meta_args(argc, argv, &new_argc, abuf, MAX_BTF_ARGS_LEN, ctx); From nobody Mon Oct 6 10:14:38 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B98451E89C; Wed, 23 Jul 2025 01:31:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234280; cv=none; b=V/Ytkr4nPhB5vwwSqevvM3d8HYlB0VaMLWwA1Jn+inUIMMLpAqlw4NXCzm3bkPdBYowYFJw2+5x9JoQHPEWOPcviekiC4YCPhI8IErE1UQ1SFb8uXklOPocbFMYtqowRkbWYdx64nf2rzJrmDLP8935sv/RsqIMiFMDe2KHMeN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234280; c=relaxed/simple; bh=Wq0i8GteHDgwXzQXT1t9807QiLhKfB+vLNzYG5yqT7Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hdbIfumA8FToRp3I7INo63FtciHKz3cVHc9GGwuMmx5564quQTz6qUTQWFDvAyaA4UBh6dAkVmSQiCJUo8oEIG3PUupF8jhksOSOLuHUHIHqhztcS/mmxeB4QsvEPUikYlKcAkJFWkDQJJNLHH0HnKxLwVCPXKCEu5syVQIyMRI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m92EAQoP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="m92EAQoP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4C31BC4CEEB; Wed, 23 Jul 2025 01:31:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753234280; bh=Wq0i8GteHDgwXzQXT1t9807QiLhKfB+vLNzYG5yqT7Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m92EAQoP8EPlYUsJ+8FLuUthqxgnF0G0kPdF8nafc7n9pQKnK8bJee7ywil5KJi8Y YSaRGXbX6tptpy7kif2zpUfd2wFjyLU6jqwWRFZXOh+51WGxTecgXxdJB9Y3Glk2P8 LPcOhHnccrxwvpqwCgxmJ5ve9GdjmAC3nL++DkeUA+pN7nOitrNIiold3vdaDKE7Gg lPH3RTBdSMF1q4DBAG9iA7PUV5edNlF2VWvHvmTzOLerjDMKsb3KzP8BUElOxeK/89 tqdAkdn9KU0RftbVz7Dh+Ox63PjWss0HwAWs8ZXuJ7foesMJ2gMh0yi+URS+frB0WI YEuyVd104gbuA== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH v4 4/7] tracing: kprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 10:31:16 +0900 Message-ID: <175323427627.57270.5105357260879695051.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175323423662.57270.14650807176845939538.stgit@devnote2> References: <175323423662.57270.14650807176845939538.stgit@devnote2> User-Agent: StGit/0.19 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" Content-Transfer-Encoding: quoted-printable From: Masami Hiramatsu (Google) Allocate temporary string buffers for parsing kprobe-events from heap instead of stack. Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Steven Rostedt (Google) --- kernel/trace/trace_kprobe.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index d14b33e205f7..ccae62d4fb91 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -861,20 +861,20 @@ static int trace_kprobe_create_internal(int argc, con= st char *argv[], * FETCHARG:TYPE : use TYPE instead of unsigned long. */ struct trace_kprobe *tk __free(free_trace_kprobe) =3D NULL; + const char *event =3D NULL, *group =3D KPROBE_EVENT_SYSTEM; + const char **new_argv __free(kfree) =3D NULL; int i, len, new_argc =3D 0, ret =3D 0; - bool is_return =3D false; char *symbol __free(kfree) =3D NULL; - char *tmp =3D NULL; - const char **new_argv __free(kfree) =3D NULL; - const char *event =3D NULL, *group =3D KPROBE_EVENT_SYSTEM; + char *ebuf __free(kfree) =3D NULL; + char *gbuf __free(kfree) =3D NULL; + char *abuf __free(kfree) =3D NULL; + char *dbuf __free(kfree) =3D NULL; enum probe_print_type ptype; + bool is_return =3D false; int maxactive =3D 0; - long offset =3D 0; void *addr =3D NULL; - char buf[MAX_EVENT_NAME_LEN]; - char gbuf[MAX_EVENT_NAME_LEN]; - char abuf[MAX_BTF_ARGS_LEN]; - char *dbuf __free(kfree) =3D NULL; + char *tmp =3D NULL; + long offset =3D 0; =20 switch (argv[0][0]) { case 'r': @@ -893,6 +893,8 @@ static int trace_kprobe_create_internal(int argc, const= char *argv[], event++; =20 if (isdigit(argv[0][1])) { + char *buf __free(kfree) =3D NULL; + if (!is_return) { trace_probe_log_err(1, BAD_MAXACT_TYPE); return -EINVAL; @@ -905,7 +907,7 @@ static int trace_kprobe_create_internal(int argc, const= char *argv[], trace_probe_log_err(1, BAD_MAXACT); return -EINVAL; } - memcpy(buf, &argv[0][1], len); + buf =3D kmemdup(&argv[0][1], len + 1, GFP_KERNEL); buf[len] =3D '\0'; ret =3D kstrtouint(buf, 0, &maxactive); if (ret || !maxactive) { @@ -973,6 +975,9 @@ static int trace_kprobe_create_internal(int argc, const= char *argv[], =20 trace_probe_log_set_index(0); if (event) { + gbuf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!gbuf) + return -ENOMEM; ret =3D traceprobe_parse_event_name(&event, &group, gbuf, event - argv[0]); if (ret) @@ -981,16 +986,22 @@ static int trace_kprobe_create_internal(int argc, con= st char *argv[], =20 if (!event) { /* Make a new event name */ + ebuf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!ebuf) + return -ENOMEM; if (symbol) - snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_%ld", + snprintf(ebuf, MAX_EVENT_NAME_LEN, "%c_%s_%ld", is_return ? 'r' : 'p', symbol, offset); else - snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p", + snprintf(ebuf, MAX_EVENT_NAME_LEN, "%c_0x%p", is_return ? 'r' : 'p', addr); - sanitize_event_name(buf); - event =3D buf; + sanitize_event_name(ebuf); + event =3D ebuf; } =20 + abuf =3D kmalloc(MAX_BTF_ARGS_LEN, GFP_KERNEL); + if (!abuf) + return -ENOMEM; argc -=3D 2; argv +=3D 2; ctx->funcname =3D symbol; new_argv =3D traceprobe_expand_meta_args(argc, argv, &new_argc, From nobody Mon Oct 6 10:14:38 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DD4B91991B6; Wed, 23 Jul 2025 01:31:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234291; cv=none; b=o0/26G6FUOFCFMnCKTgz3Vu6imQRGmn86Oh2BC49L4yE7bkFrbuVw9l2bf4lUaTQQ6aog0aWkohjrT+68+0ZG/gBzSyW76v8g0srRB/NRbRcNVWUAPRPjMdC8Z76lHekr6FVsEoILoQfthVDujd8XE4VJTsOh52UiEyrt1Ssda4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234291; c=relaxed/simple; bh=s4acfsBSSQb0a10qdIvIDWcvzwbhtVpvJV4UIF0tfbE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eSrrB/CCw0/ZT6jA82v028fffAfj8DHcpbtVcrnM3tGmA8W28H9NKDq+inB7Z/8MrJQiA+OpLVDonO79JU76k1CNrsl9T3jpzFEweQZMfC/bZ1TYmGYoRvCFqrmzFmhxrz6EA9qUUiGo00xhBhVsUbkSpGe3vxM/YxiPvGvHPaw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aRD/ymKb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aRD/ymKb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2367CC4CEEB; Wed, 23 Jul 2025 01:31:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753234290; bh=s4acfsBSSQb0a10qdIvIDWcvzwbhtVpvJV4UIF0tfbE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aRD/ymKbOirPj+42Q7NWdxZWg3BdjaEdAuW9gKoaqC4WZGCv1bl8AnJuGLrL0UUs1 hZX0cRuztZKMQCaOU9uYkJYTHY109FRoFORRX+mugJOzBDmCT1lw7AyF+G1WTWhm1j a698eL2GF6u2BukfDiEpjIq17R8GjCCC9zEivWQYG8PKt8dymwovqex+AbDLAT7NlW dpbVD+Znkui7yyBi8vd81Ox9+r/YZ0Z6V0lzFll6FTGaUEjgmMZXq5bc+E0utD2cNo uUzekRvwmS7AQU2m+TPWbraYprTHvETWb24pu+6fPqtTFt7IC/zajKIGf/+mq9V1yo 4khFxQ2oa+eGA== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH v4 5/7] tracing: eprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 10:31:26 +0900 Message-ID: <175323428599.57270.988038042425748956.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175323423662.57270.14650807176845939538.stgit@devnote2> References: <175323423662.57270.14650807176845939538.stgit@devnote2> User-Agent: StGit/0.19 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" Content-Transfer-Encoding: quoted-printable From: Masami Hiramatsu (Google) Allocate temporary string buffers for parsing eprobe-events from heap instead of stack. Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Steven Rostedt (Google) --- Changes in v3: - Split #include sorting. Changes in v2: - Use new label for returning -ENOMEM. - Sort #include alphabetically. --- kernel/trace/trace_eprobe.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 7ba3a18be4c5..f16a0ab0b001 100644 --- a/kernel/trace/trace_eprobe.c +++ b/kernel/trace/trace_eprobe.c @@ -9,6 +9,7 @@ * Copyright (C) 2021, VMware Inc, Tzvetomir Stoyanov tz.stoyanov@gmail.co= m> * */ +#include #include #include #include @@ -871,10 +872,10 @@ static int __trace_eprobe_create(int argc, const char= *argv[]) const char *event =3D NULL, *group =3D EPROBE_EVENT_SYSTEM; const char *sys_event =3D NULL, *sys_name =3D NULL; struct trace_event_call *event_call; + char *buf1 __free(kfree) =3D NULL; + char *buf2 __free(kfree) =3D NULL; + char *gbuf __free(kfree) =3D NULL; struct trace_eprobe *ep =3D NULL; - char buf1[MAX_EVENT_NAME_LEN]; - char buf2[MAX_EVENT_NAME_LEN]; - char gbuf[MAX_EVENT_NAME_LEN]; int ret =3D 0, filter_idx =3D 0; int i, filter_cnt; =20 @@ -885,6 +886,9 @@ static int __trace_eprobe_create(int argc, const char *= argv[]) =20 event =3D strchr(&argv[0][1], ':'); if (event) { + gbuf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!gbuf) + goto mem_error; event++; ret =3D traceprobe_parse_event_name(&event, &group, gbuf, event - argv[0]); @@ -894,6 +898,11 @@ static int __trace_eprobe_create(int argc, const char = *argv[]) =20 trace_probe_log_set_index(1); sys_event =3D argv[1]; + + buf2 =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!buf2) + goto mem_error; + ret =3D traceprobe_parse_event_name(&sys_event, &sys_name, buf2, 0); if (ret || !sys_event || !sys_name) { trace_probe_log_err(0, NO_EVENT_INFO); @@ -901,7 +910,9 @@ static int __trace_eprobe_create(int argc, const char *= argv[]) } =20 if (!event) { - strscpy(buf1, sys_event, MAX_EVENT_NAME_LEN); + buf1 =3D kstrdup(sys_event, GFP_KERNEL); + if (!buf1) + goto mem_error; event =3D buf1; } =20 @@ -974,6 +985,9 @@ static int __trace_eprobe_create(int argc, const char *= argv[]) trace_probe_log_clear(); return ret; =20 +mem_error: + ret =3D -ENOMEM; + goto error; parse_error: ret =3D -EINVAL; error: From nobody Mon Oct 6 10:14:38 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9CF891607AC; Wed, 23 Jul 2025 01:31:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234300; cv=none; b=hROWDD2Fz1v0wb5hBlFVQ+ScvDJc7auVCdw1rDyYkj7Wd2C9Ui8Sq8G1H5PJHfSDliCRry2L5iF4EE2++bv4NDuS8PfAU+RZ8VTD/KbgqMtw05fijf9tAYbh2mVem3JQ19lEXXC4xYNnMAywV+gHIoED1gQuM+z6HFMfb0+86Qw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234300; c=relaxed/simple; bh=/MpxVUrHL2vIkvTz1clrqlGGpKYcjUtDZCwlt5gwSF8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Lpc53Gy5P+cuQViZNJcjpPXoQTgsyDFSCWPs8ePZZo2CQeTq8ZdbP5VdpSv5VRYcRXXpadgQLeaARdT7G+1q09nOfAah+OqxjGh8kV7CzhkO+RAKRGkEz7fSnsYAdxzTJjjY/U74/R9+ALyZtgKm9TsJHLjaRfcrT4uLTULiF8c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ej/aWAAx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ej/aWAAx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 04899C4CEEB; Wed, 23 Jul 2025 01:31:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753234300; bh=/MpxVUrHL2vIkvTz1clrqlGGpKYcjUtDZCwlt5gwSF8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ej/aWAAxXencFbNlHIqCDwVhKaUJP8uwJ5O0r8V6P9vM9+RvE+dn5SWbK02nDx/Qm iymrdTxDSYwZ8E3YKJMcdEd6efwbuP7wHpVmTNUpeMqFGWFVrl0W8Xm+ba8vMpDPyD iCOJN2uW6NjmRNLFWhksurkH1f1iC8WwLueUIkCZdRuWZUbaFao88OiHX77BzcGJcV b38mynI2E/VEhKHtKWRq2ZBgOPn+O2naluOfJwCGdeR/HMBqedNc3frFbnr6UTZdIW egoUd4qtrxzrYaXsC2dqAjmWV0rEaYJ8XJsMl/+m4LJomXr4bJPVAkbviWeRblVzlQ ix56PshnR8FJg== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH v4 6/7] tracing: uprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 10:31:36 +0900 Message-ID: <175323429593.57270.12369235525923902341.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175323423662.57270.14650807176845939538.stgit@devnote2> References: <175323423662.57270.14650807176845939538.stgit@devnote2> User-Agent: StGit/0.19 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" Content-Transfer-Encoding: quoted-printable From: Masami Hiramatsu (Google) Allocate temporary string buffers for parsing uprobe-events from heap instead of stack. Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Steven Rostedt (Google) --- Changes in v3: - Split #include sorting. Changes in v2: - Sort #include alphabetically. - Add fail_mem label for handling ENOMEM error. --- kernel/trace/trace_uprobe.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 872dce092e46..8b0bcc0d8f41 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -8,6 +8,7 @@ #define pr_fmt(fmt) "trace_uprobe: " fmt =20 #include +#include #include #include #include @@ -19,6 +20,7 @@ #include #include =20 +#include "trace.h" #include "trace_dynevent.h" #include "trace_probe.h" #include "trace_probe_tmpl.h" @@ -537,15 +539,15 @@ static int register_trace_uprobe(struct trace_uprobe = *tu) */ static int __trace_uprobe_create(int argc, const char **argv) { - struct trace_uprobe *tu; const char *event =3D NULL, *group =3D UPROBE_EVENT_SYSTEM; char *arg, *filename, *rctr, *rctr_end, *tmp; - char buf[MAX_EVENT_NAME_LEN]; - char gbuf[MAX_EVENT_NAME_LEN]; - enum probe_print_type ptype; - struct path path; unsigned long offset, ref_ctr_offset; + char *gbuf __free(kfree) =3D NULL; + char *buf __free(kfree) =3D NULL; + enum probe_print_type ptype; + struct trace_uprobe *tu; bool is_return =3D false; + struct path path; int i, ret; =20 ref_ctr_offset =3D 0; @@ -653,6 +655,10 @@ static int __trace_uprobe_create(int argc, const char = **argv) /* setup a probe */ trace_probe_log_set_index(0); if (event) { + gbuf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!gbuf) + goto fail_mem; + ret =3D traceprobe_parse_event_name(&event, &group, gbuf, event - argv[0]); if (ret) @@ -664,15 +670,16 @@ static int __trace_uprobe_create(int argc, const char= **argv) char *ptr; =20 tail =3D kstrdup(kbasename(filename), GFP_KERNEL); - if (!tail) { - ret =3D -ENOMEM; - goto fail_address_parse; - } + if (!tail) + goto fail_mem; =20 ptr =3D strpbrk(tail, ".-_"); if (ptr) *ptr =3D '\0'; =20 + buf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!buf) + goto fail_mem; snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_0x%lx", 'p', tail, offset); event =3D buf; kfree(tail); @@ -724,6 +731,9 @@ static int __trace_uprobe_create(int argc, const char *= *argv) trace_probe_log_clear(); return ret; =20 +fail_mem: + ret =3D -ENOMEM; + fail_address_parse: trace_probe_log_clear(); path_put(&path); From nobody Mon Oct 6 10:14:38 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 4A3CF1D5CE5; Wed, 23 Jul 2025 01:31:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234310; cv=none; b=hmXrStma4e2E85pA3exvajdBg0Wcuv4mXOuVwdyUXpgt+nMGEL6tAuZJ13U53OU/hk25YpEqSlG/ma8JhxyhTQvayU/c28cwVcLctPI4f8bok0bTF25Hmybs+kwL7qLba6qweg4cDh46X6e4q2DRgLVh1BXTFWqGEXMKmJI2uUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753234310; c=relaxed/simple; bh=0o/Q+PhjU0nIVPGyd9F9Kvrv+SnISOZztWOthtpvPKs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HSNrjj3Gkvd+EwwfYbI8gBV3QSgdiYcJlCAPJx5PFEHDRSZ+A5s4/LZtCXuUtovaeQwte8Mt4Lm8R+/OrQOkuGmrnAOztyJ2AAA0Css/4ecpsUW/utw2kr2OpWRWw3igm8GKporO1pCiuGlStskpQA07imidVpE2JlaKDzLQGLQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mTf8CxtS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mTf8CxtS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 92291C4CEEB; Wed, 23 Jul 2025 01:31:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753234309; bh=0o/Q+PhjU0nIVPGyd9F9Kvrv+SnISOZztWOthtpvPKs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mTf8CxtS47okcbY/yLD9+wNh8Z1ckezFsqxYXoAl+KVL+PRTPx5qnnFyFc1Biv0JA 2Rg6MUGgEkQdMG197e8wf1fRM9RSmZRNV6gQxA2whhB/GvUW+PWeFZifp0612MQgl/ CLlVEYjVz99YciI6YvPUnobJ3DyMkvE/JABa8Za2r7yt5OduPioKveKdzNrrEFxVqY GE2DxXLTnY94yDQzZto3u0r53f8BexsPaV+KrFp8I1XGZ5jZNgApE0PLHMGhPOuAfV lBJEvUb3kGb3ng1uGJKJKKC2Cxa5bspDG9a3eJ9xLfX1FhtUwLN9nI4jTmVTSVRdhf mKN4hHEyq2b9w== From: "Masami Hiramatsu (Google)" To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH v4 7/7] tracing: probes: Add a kerneldoc for traceprobe_parse_event_name() Date: Wed, 23 Jul 2025 10:31:45 +0900 Message-ID: <175323430565.57270.2602609519355112748.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175323423662.57270.14650807176845939538.stgit@devnote2> References: <175323423662.57270.14650807176845939538.stgit@devnote2> User-Agent: StGit/0.19 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" Content-Transfer-Encoding: quoted-printable From: Masami Hiramatsu (Google) Since traceprobe_parse_event_name() is a bit complicated, add a kerneldoc for explaining the behavior. Suggested-by: Steven Rostedt Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Steven Rostedt (Google) --- Changes in v4: - Move longer parameter description into Return section. - Rewrite the style according to Documentation/doc-guide/kernel-doc.rst --- kernel/trace/trace_probe.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 9d26d901c9e5..4fb3d98e38ea 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -247,7 +247,25 @@ int traceprobe_split_symbol_offset(char *symbol, long = *offset) return 0; } =20 -/* @buf must has MAX_EVENT_NAME_LEN size */ +/** + * traceprobe_parse_event_name() - Parse a string into group and event nam= es + * @pevent: A pointer to the string to be parsed. + * @pgroup: A pointer to the group name. + * @buf: A buffer to store the parsed group name. + * @offset: The offset of the string in the original user command, for log= ging. + * + * This parses a string with the format `[GROUP/][EVENT]` or `[GROUP.][EVE= NT]` + * (either GROUP or EVENT or both must be specified). + * Since the parsed group name is stored in @buf, the caller must ensure @= buf + * is at least MAX_EVENT_NAME_LEN bytes. + * + * Return: 0 on success, or -EINVAL on failure. + * + * If success, *@pevent is updated to point to the event name part of the + * original string, or NULL if there is no event name. + * Also, *@pgroup is updated to point to the parsed group which is stored + * in @buf, or NULL if there is no group name. + */ int traceprobe_parse_event_name(const char **pevent, const char **pgroup, char *buf, int offset) {