From nobody Mon Oct 6 10:13:23 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 29260282F5; Tue, 22 Jul 2025 22:01: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=1753221702; cv=none; b=GPqBDUEigLuOD1oj6JaqrjHEWA0exwtDxPswkz2Y/q1aSI38zXRURHxEBdTqHcInsoj7VPFM57cfBhMeN6YLB8KqtIiatNr0CYEwRcwso4bri6EFOxKAnxn9HhxySbMxs1WXRGI/0E53DnKNHIOmSKD0UnD3o9zrkB4zExa+/a8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753221702; c=relaxed/simple; bh=9/BE9hurBedeM2z86Blmg+TQ7LrJEFOGlOX5tOPf8rM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Li3QLH7rH52cS6CKCtQOZAUEzTHPwwjIhou7Ot0dzodrrHH4xt8ec5vAwAE/9RSOQrXyetLImpl4QdNH/6uGJxTYGa5HcclvOdqkKFuNA9jSPJrhOMpfvgeJ6TYSSbc0vYPwcdhsvqc0C2sZjhIFkaTnZxf/glqDCFjWoUkDoTM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Kklo3Aw4; 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="Kklo3Aw4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A5D24C4CEEB; Tue, 22 Jul 2025 22:01:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753221700; bh=9/BE9hurBedeM2z86Blmg+TQ7LrJEFOGlOX5tOPf8rM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Kklo3Aw4/DyzE7ZS4G4YO6jmvXAzVDODzWp5+XEOeqV+RPFJ3B60TDV7fxLDU1AN7 EFVWmxlPMxBgSqbcmMWCYtvy+9q6h6EogyYmtCnJFG0Y2hjC+WJ+ZcnZbIxb+DJWfm 55fkVhykz7BaTIICwGog9CdUIu3VmM/QGZvU0zsAtUqbhfIVaWuf1dmc6znifYmapn kCJDyafPACXFA86LGXPKzW1vuiWzgkCPHNLBakbNJ+rabW9nqUMgaG0nKuRK/BBCdx 1+VHFjrUprOWPrKydhRWvvvs4A13hUZ7DH5FzV3+SOB0fuWgBdcpBnuhNyBN0oh0or E3ycksFzdHvhw== 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 v3 1/7] tracing: probes: Sort #include alphabetically Date: Wed, 23 Jul 2025 07:01:36 +0900 Message-ID: <175322169649.44400.17852098236914311512.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175322168606.44400.9155291012158349647.stgit@devnote2> References: <175322168606.44400.9155291012158349647.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:13:23 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 003EB221FC9; Tue, 22 Jul 2025 22:01:49 +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=1753221710; cv=none; b=XsPhuYfkr0/puGQPTjwi5CCvug51kOT4jnur4Ow6P/MovgvFOot5mIcxJ3f4if9p+7RpsvVOHRLuLXTIEyjIfcw40YKtfiKc3fKifnKVvpODosIFnXxfGGq0hBxPkqiITvT6pqWR73All5T6pfq+xHMK93BvaeSX44FylAV8MXI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753221710; c=relaxed/simple; bh=7BcGUd4WqQVRorAiAOCWe6/HJTyfG3sk3ApDuhdwFww=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ZJNYyjKHxi/KcQF3LNKxWhl3gXDI0vW5dd7YfRTpo5Ye3hAznxCnw77Xcp3Y/FFP/ulnQrxujuFy81a7A1fw3VQ2/rBIcGDdj/C+fViAc7PP4biQjrhrGNN0b5/IHmfZUssyMqVm/bl8t6VsesBhOs00N55HxxShMRMwww/4o+U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JtiN+tR0; 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="JtiN+tR0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EBBE1C4CEEB; Tue, 22 Jul 2025 22:01:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753221709; bh=7BcGUd4WqQVRorAiAOCWe6/HJTyfG3sk3ApDuhdwFww=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JtiN+tR0+rSnHBX2t5Mg0al3Ug5PMel//dg6RqLtaJvccsZlzcATAD6XImhiWyPFk azvP1NLWy9bWY3rnefUTq52kbr2xLSE4c8NYVkS2iEqtxGcOh1gDb3To8mFi+Gz58h 33I/HqFLoGGASIghJmMyQeqs4G+evB7kqBI1qmwC0vNHgs4mSUqb3DweKJHtYhikeW 7vz6uMVWj7tlzok0TzqSNZE+9y0xJYH7SWhBLkWsTLOIiJCIC/WknRN4QGdOMigfkv 2MNzmnsDSKa5b7plgQs9ZJKBNvIZz8q4qgzNIg8fv8ZJFKt0hpi+BUqc4pVdaEf+SA HxI6ZoDUa/u7A== 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 v3 2/7] tracing: probe: Allocate traceprobe_parse_context from heap Date: Wed, 23 Jul 2025 07:01:46 +0900 Message-ID: <175322170601.44400.16839124706616607558.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175322168606.44400.9155291012158349647.stgit@devnote2> References: <175322168606.44400.9155291012158349647.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:13:23 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 ADCCA2820B9; Tue, 22 Jul 2025 22:02: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=1753221720; cv=none; b=SiZNdBFkrWxDdHlKymiAB67zD5pGuDePzExlfGJzyUezTmE885xNPmjp8h+L4EAUZyvsskFRogmXMbpp/YkO2i2yT4ox46Yhv4Z+lJXSpEJI9DVkf0tCzzBflbewvhn4E6mxhBQeaxvNatw1St5wPxUUDE/0eRnOgBZoGv/5hyU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753221720; c=relaxed/simple; bh=PZmuufTGGGjiYbuJdT+PeG1AGZmHgds/7leKlUMWos0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=htNEmbjwphrL9MMVYo2hBjLbnH2veUlxb9tjvZnGMhLa3ioYio8+Nck23PvdKlhssKsxJfpW+brv1yKb11kQWEgXIwFyPgFNTiQS0t7tAJxG2OPS6xcDZZ1izW6TfMjDxLFyK3MpEOSGW8KMheVdgBNxPGpawNbAjtbq8p0BK94= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WWWosBli; 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="WWWosBli" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B338FC4CEEB; Tue, 22 Jul 2025 22:01:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753221720; bh=PZmuufTGGGjiYbuJdT+PeG1AGZmHgds/7leKlUMWos0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WWWosBli1Yyg5likZVVoX3up0dDiB4iInxtsH84XraZ1PLa8c/c3+RhuybSUixHud jTNBEz4OeTayqnHD3HsIUNopPTSqA9oY5o+tJuul8nShSeCMD04tJ1p7tkHRoYy6ZM PvQ5wJAtiGYnpDFBMqp7S65KS+BJYkJz5yq80uSpi39C8p8jrDnHAya9NroNeoBe+1 +yQ+CB37EwLFwbtRdg0eMcyYzpLjcjyAZ1xtYS4SDHxDx7kaBLUTBrDgh032OR//SC OLNaudGXBJ6q4p3anO37rqdVPP0HEwlnkj5t81MaHxDfO5BEEugoSCKSp8exUlQYUL 0dAmvxAh07B6w== 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 v3 3/7] tracing: fprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 07:01:55 +0900 Message-ID: <175322171522.44400.1130912986696109830.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175322168606.44400.9155291012158349647.stgit@devnote2> References: <175322168606.44400.9155291012158349647.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:13:23 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 9DE74282F5; Tue, 22 Jul 2025 22:02: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=1753221731; cv=none; b=rNLLenXZRb4gY+ZuSDmWeZw6Ai0U+OrFM5p2rA2F93YPlSvC3iZAeZXfdBuSeQW1ku6F5QogeIb6QqAL9gWZXXyNTGRwBu0u/2oGkcMvtzdR+cqNeRY8WEZre8vN0/2mERt8T9kEtE83CWsAQnd0cPA/fJcMAqZ9oFyp+h4ywjA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753221731; c=relaxed/simple; bh=Wq0i8GteHDgwXzQXT1t9807QiLhKfB+vLNzYG5yqT7Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Wzf7jsnbNDgJEJHQZCOoCOnphR8jn8tOO6SV9s9QLNFjuxSrKm3jJClYA5JVGdCiMS/O3XGFl45JQROF/iwghM7tXEZwatnquiXDVKMzItcvHSkObNkLHNINoQK8/UEjbwmPyBvjz7Hm5RuB7Xvpzr4pAxPcA+2H+wphk6uYcTY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FpzG7ewt; 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="FpzG7ewt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D313FC4CEEB; Tue, 22 Jul 2025 22:02:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753221730; bh=Wq0i8GteHDgwXzQXT1t9807QiLhKfB+vLNzYG5yqT7Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FpzG7ewtH/N4G2Aq4spItGnHdTeQgcH3IooB4RzL3oeQgyeWbOGWtJhcmsjqGMS5P KQ47BYcbMwbj93EEDlZ/JMMFQqocdc+N/Vf6LFNRRhrzlIFEZNBMmqdex3eVAk3x6B XhKYlYphRJY7E7Ik6j/YeliEIbVqxWrISfB/ETEGshUxm64Tx97aqtLtK3a/k4XJZ4 0mo8RYSuJcwGNgjhiKEUIchusrPzCn2766Ky39UsY6ZYVFpsgdfR435WgcrfrLbA2E yEtd5sL75eQHS/VMp8JzRNfpANe/tRyGmdxOEMji7PYK3k9AnOZquT+XSvunt/J9Cp /5lHZ3J7NQZ3A== 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 v3 4/7] tracing: kprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 07:02:06 +0900 Message-ID: <175322172565.44400.4742329195614143339.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175322168606.44400.9155291012158349647.stgit@devnote2> References: <175322168606.44400.9155291012158349647.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:13:23 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 711FD286D5D; Tue, 22 Jul 2025 22:02: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=1753221740; cv=none; b=FKXFITYplpJouvkLROXtIrsEQ4rk6Xl2y9qcd86+iBVzKZH0gA8SbXawPTXKB8gU6lbTI1h0V3QdU27RiuUq/8k1Ee1hzlDIl7KzmwjZlSUMuyPXqqYXf3LNSnFUW/o6XPJ5k6hMFdI8Xyf7WFJQuxdsctazb1jUd0E/NPgvFhg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753221740; c=relaxed/simple; bh=s4acfsBSSQb0a10qdIvIDWcvzwbhtVpvJV4UIF0tfbE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=LrgT0Fu4olq0h3XoW8v1AC0afhjyJY+LPqkTES9z9d25hPDF5pZjqOcxS/PsMCy7loQOYifWs8K3CH8FHdboO3clowRRka5PWkJSyICUaueJyR3QM6/C/AicI7hGucDv6BYciNyMQPy3K/+h/af9ABfzYO1b6c33lADnw4lSPPw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fNs16k8n; 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="fNs16k8n" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A9BFCC4CEEB; Tue, 22 Jul 2025 22:02:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753221740; bh=s4acfsBSSQb0a10qdIvIDWcvzwbhtVpvJV4UIF0tfbE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fNs16k8nQ2LVCOLnxHJEoBKhKPEJkctR3wAyQRPtIxHKiUNvcbAtch7i4FkDeBSLJ QF2gUABwDXhtXNetMafw3GG+hhtcVnVQm+De2LlVkqrzSX8n10aaktQxlze2ASDaXd Fl0G1ptVcigOJRrx5VmRWwKC0thIQzSGflt3p9rn3EhCqUQ8UNrfqFMGX3IppO4Eog 5Gvn2Ol0g8VmlxYqnvleJA5zHCdvkUV+6XG6mLVvRDXEs4qo5AupfMGYQE8SMBqJG/ IiFvzVWSr24AZU1gURZ3qSqW0t6dXJAwtuP5ZeQz9ZMlAgSgijNjv37sdC0HK/mgRt rWHFjoopsdUeQ== 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 v3 5/7] tracing: eprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 07:02:16 +0900 Message-ID: <175322173570.44400.3225843477955658372.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175322168606.44400.9155291012158349647.stgit@devnote2> References: <175322168606.44400.9155291012158349647.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:13:23 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 661F6284B4C; Tue, 22 Jul 2025 22:02: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=1753221750; cv=none; b=qZkXeN77RyQz03ykOukiBOxiVzJrwwKDv8EoFn3IEirk68dTyGTICOt6UEZQFifJKAXm3Zj0GXHLhh/gpMkietZbStfCeXU/RPbkGHISLbeMubcgfs4/fkkEtq0//MzDNvtzPT4HlfLRJBxXm983pITf2NgSZLPGuDBFDRYAQ7U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753221750; c=relaxed/simple; bh=DxO1YM1X+7JaNQ9U0X8Q5IH0b0RsP0wermUze7T+tCk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KlG+kCOu7LIWEg3QwJfu+gNo72IDuz0+OcMUqNVf1ojry+u9OU8CG6SaLdbud5V2CnU7Eq8WooyvHTYFqTRs7gm0XM/PqywQ71jEiBb1I0dwYJsrtj8BRSqQWuwyWGXUVvq5sSMK89ZUua6m5JSNb3WrbLqps5eoWGANVGaUuUM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZXRxhk4V; 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="ZXRxhk4V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 804E1C4CEEB; Tue, 22 Jul 2025 22:02:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753221749; bh=DxO1YM1X+7JaNQ9U0X8Q5IH0b0RsP0wermUze7T+tCk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZXRxhk4VBvRUpC2hDNbswi2Eom3QA+VaejVsk/rvOOZcAFerFFwV1RvA2lv9YwIN2 4+oa4LW4IQYuyBW4yB9NVIkAXtOY7nD1SkW5wvcJnv7mHT/qpAAAMq2dbIaOJrE0V1 8BuhgoBu3ic1HrUHqQrhBJA7Tnfr9PqyoNcqnGjuVF4lwLDMDbGTK2wtAINwzgTHR/ x+Vw9AyMFC8DyjcuZbP8LgHtuAvwobyaXtYlnEugYW6v0yxgUZHTye7H5pOnDgDJBy syZ+3/pMuHuIjBgM22IuGPHrpuOyPw8baxNW+xPCSawH5zoiLfivnZXqnBJC1dygu1 LfAsiNe9ecvHg== 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 v3 6/7] tracing: uprobe-event: Allocate string buffers from heap Date: Wed, 23 Jul 2025 07:02:25 +0900 Message-ID: <175322174554.44400.67987510323737083.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175322168606.44400.9155291012158349647.stgit@devnote2> References: <175322168606.44400.9155291012158349647.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:13:23 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 D6B0B287246; Tue, 22 Jul 2025 22:02:39 +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=1753221759; cv=none; b=Lgobp3tEMM7FVJ9p+Fx4G2K5YpKtSsS4YIvRh+ANIHrQWz2YVzf/yKmQrF1Nkta2ZkaFfOVhhTOfzemoND6jcGtoOIh+c7CMh/grjupPAEU+yqs/PAKo2u3obNkG+SOgeYqmkWddHFJa4dXRMwui9Kh7JbdGIUOa2BxYKvTIl20= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753221759; c=relaxed/simple; bh=EPde5y9stfjJcaIFZ59a2xBrgJx9wnyVqR7ktHXVogo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=CADGdqm4I3u8HBLaU1ORJA/UwC8KEsmqKH/W+5hQRGOA8iFKlwzqVFWRraQS4uLNfLgXHWlxjIel/V2YR61nXlE6jSl1IkcYhBcAYfzTNQeSnfH1xFFuKkpE7VAwGuP5pFY1tI72YOkTnR94Wi40wCbVKi4Y9zbSlecLY36plRE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NQJpCg6A; 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="NQJpCg6A" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6FD9AC4CEEB; Tue, 22 Jul 2025 22:02:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753221759; bh=EPde5y9stfjJcaIFZ59a2xBrgJx9wnyVqR7ktHXVogo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NQJpCg6AvytfkgaTGtRyuH3K2pj/l/Em5crR1Gy7SZ9iAfU6D8FGatEUKMDz13a3/ tzSZjj2PUD2AezrtDfE3OTn9Qacc1GsJowERERspwM2wK1gZjd+9J4ELbG/bGqXqrQ FhjGsDBcEzxIh/WpZct4zGaf313cOIawMaJKj3imldkYF8xYO8VitP0KDpTJI4JHd8 GnAdp03m69thJwndwQI1tcS5NO6Bn9MRGtN+NTWhwCoSBQFp1FgleSJPctRzNlQg7a qssT6G/QBza02EGY6GJg2xoYWDBnD8JL7w3nc6+IjaGzq2ZjrWToAhKLQO5MugJhO/ 64jgMs5Wlpd9Q== 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 v3 7/7] tracing: probes: Add a kerneldoc for traceprobe_parse_event_name() Date: Wed, 23 Jul 2025 07:02:35 +0900 Message-ID: <175322175536.44400.179953626110801411.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175322168606.44400.9155291012158349647.stgit@devnote2> References: <175322168606.44400.9155291012158349647.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) --- kernel/trace/trace_probe.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 9d26d901c9e5..7dcc4a548c69 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -247,7 +247,22 @@ 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 names + * @pevent: A pointer to the string to be parsed. On return, this is updat= ed + * to point to the event name part of the string. + * @pgroup: A pointer to the group name. This is updated to point to the p= arsed + * group name, which is stored in @buf. + * @buf: A buffer to store the parsed group name. + * @offset: The offset of the string in the original user command, for log= ging. + * + * Description: This parses a string with the format `[GROUP/][EVENT]` or + * `[GROUP.][EVENT]` (either GROUP or EVENT or both must be speci= fied). + * The parsed group name is stored in @buf. + * The caller must ensure @buf is at least MAX_EVENT_NAME_LEN byt= es. + * + * Return: 0 on success, or -EINVAL on failure. + */ int traceprobe_parse_event_name(const char **pevent, const char **pgroup, char *buf, int offset) {