From nobody Mon Oct 6 17:06:48 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 CE4CA221F04; Fri, 18 Jul 2025 11:34:13 +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=1752838453; cv=none; b=PoOtTq0C+eNmtS7I+iSyX4XdxtBFai3hnX2MMkXYAQVjNCEpYuVqZ+yuwSsvAtrTJjRVuQOLCzK38C9NnmuSIQ2k/bE5d+lC6Nfa1HI+23TrMcclgqT3dslxyVf5n3I0O5+RxD7xDPBCNTTmuTMrnm5rMAX35+j0KVAkfJsxcoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752838453; c=relaxed/simple; bh=VWXd4JzwDeER8jbP3WGyWoPVm9dCSHbXPe6mmaw+s0A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dCZoLMcacQoZmx1L+vUBaiFgd/PNsdpN9L181bNQ7Oqhr4a2wndg7qINtABApjI7xk24nDDOK6DIGj73Hn96nHxoCMA5zlog2Orgwq9t+5s10kiTfUmCT+71MnzrwBCdumgD9RBvUnJz9JFAmNJePJ/Zcznyb6zxpuke/qbVgVU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pH45Cj8K; 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="pH45Cj8K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B9F35C4CEEB; Fri, 18 Jul 2025 11:34:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752838453; bh=VWXd4JzwDeER8jbP3WGyWoPVm9dCSHbXPe6mmaw+s0A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pH45Cj8K24bBuwuVhoFyLZZOFDfBO3tKfqrRyKN1LC6iS24Ot2KieyCLZ0Mo2X+Yh GgZq31i2/x0DKonw9sewphArFl+AYKMj7x7SXkloUY3n9P5ts5r2P6FiE2Q638th7H YO5H0ia2FgfcNeicb+DZr+miOr6qbFqqbXsIEYxApJqZFNfBN1P+EaA1qO4+VrvzXy X2wFEjx3ivYxH5/zVuc+JlOd6Zz+bvDIb7W7Mm8dsswlzciytrBHEZe31883h/FvMD qIGexpSHkDed4rt4PTrHx6v4K1bPeBS85xkuPHHQkKVsL6h6eyUISA8sO23pMPmrVi pgRWU84jbsmvQ== 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 1/5] tracing: probe: Allocate traceprobe_parse_context from heap Date: Fri, 18 Jul 2025 20:34:08 +0900 Message-ID: <175283844827.343578.10408845752163723065.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175283843771.343578.8524137568048302760.stgit@devnote2> References: <175283843771.343578.8524137568048302760.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) --- 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 | 15 +++++++++------ 5 files changed, 41 insertions(+), 20 deletions(-) diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 916555f0de81..1e18a8619b40 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 dbf9d413125a..264cf7fc9a1d 100644 --- a/kernel/trace/trace_fprobe.c +++ b/kernel/trace/trace_fprobe.c @@ -1383,14 +1383,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 3e5c47b6d7b2..15d7a381a128 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 854e5668f5ee..7bc4c84464e4 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -10,6 +10,7 @@ * Author: Srikar Dronamraju */ =20 +#include #include #include #include @@ -438,6 +439,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 (!IS_ERR_OR_NULL(_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 f95a2c3d5b1b..1fd479718d03 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -537,6 +537,7 @@ static int register_trace_uprobe(struct trace_uprobe *t= u) */ static int __trace_uprobe_create(int argc, const char **argv) { + struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) =3D= NULL; struct trace_uprobe *tu; const char *event =3D NULL, *group =3D UPROBE_EVENT_SYSTEM; char *arg, *filename, *rctr, *rctr_end, *tmp; @@ -693,15 +694,17 @@ static int __trace_uprobe_create(int argc, const char= **argv) tu->path =3D path; tu->filename =3D filename; =20 + ctx =3D kzalloc(sizeof(*ctx), GFP_KERNEL); + if (!ctx) { + ret =3D -ENOMEM; + goto error; + } + ctx->flags =3D (is_return ? TPARG_FL_RETURN : 0) | TPARG_FL_USER; + /* 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, - }; - 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 17:06:48 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 737922D9493; Fri, 18 Jul 2025 11:34:24 +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=1752838464; cv=none; b=tUO2EqehFwCCHsHhxOBmTmE3kYaj7XUKf78RpM4GCCNHML/W3Fud9riAD4uMTOoSz89BUvlJwThnuzZylZqss146bUq8umZ3XtCjE10KI0dWbFCfRc64iAXsOFobD2kU/q+z+HT0IVN60DHP4cLcWv+5lA3RUj8KMnLpol0QEsE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752838464; c=relaxed/simple; bh=oBnvY0GESgkHTGe+X4QPvvoGt0YxYYQo5O6GaTuTlJY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ag29atv5vtp19HJiRnjoEM68HCD65RaJXlwKIB2MGFBvxn95BNkhUF3A7lwSuT/k0jhMNeIxRwRbZ/IHRYVTjb4RLDi+x6LrE9ahNEnsZD5puF+eabojxyzLTTqSUds3bxeIjLcu9nkexeuByTgqH+vJ3cgIMBxiQosVbgC4tp0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HF5ZnXyX; 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="HF5ZnXyX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 96311C4CEEB; Fri, 18 Jul 2025 11:34:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752838464; bh=oBnvY0GESgkHTGe+X4QPvvoGt0YxYYQo5O6GaTuTlJY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HF5ZnXyXp3tp5H441Eb9ghSCM0SK0qhXl5ZnF4+1VThgX4n1Ose5Ixf59mSing2Cz bkjZc412LuhIYx5AhZFZ8ush4Ag8MalkFy8PCQq8nJSzZ7zby2SHUj5hDilEp7hBSo WbcpzuqJJchhVXlxS1b2rT5c6RhGYNHo3N6C1WQafFpJ1YIc8BzKVuMl/bgWbSrXDp krCo7qFIcOrkHWsY7yI6Gj8P4PFn2LoJU/CZRYvT+FhFCfzNjurn7BuLy6k6tI4yza 1kZr9kKpHVljzug9qWst6+mpp1PF55FMzyDDF+nQhPtiZ2p0wkZtDXRikHeGvt1ze+ Fyr76yso9cfSQ== 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 2/5] tracing: fprobe-event: Allocate string buffers from heap Date: Fri, 18 Jul 2025 20:34:19 +0900 Message-ID: <175283845881.343578.10010946807218897188.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175283843771.343578.8524137568048302760.stgit@devnote2> References: <175283843771.343578.8524137568048302760.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) --- 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 264cf7fc9a1d..fd1036e27309 100644 --- a/kernel/trace/trace_fprobe.c +++ b/kernel/trace/trace_fprobe.c @@ -1234,18 +1234,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; @@ -1273,6 +1273,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) @@ -1280,15 +1283,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) @@ -1304,13 +1310,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 17:06:48 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 5DC722D8387; Fri, 18 Jul 2025 11:34:35 +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=1752838475; cv=none; b=PIQrlrqNADdQOMJEf9wTIT7WoSnk1WZ0bGHlD2DxTX0mD9osUOlxqAniZLr9nT3hLzvwC7H2apQAvyuZ5THlYUnVuv/FEJLpQmrJUp+G6ao1cNIZeGi6yxfxsnaYyEflkSSIaOQNTlzoXDiGsSDzXN2CywRhi4xCxSSrFcKab6U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752838475; c=relaxed/simple; bh=E2lm3aHfVHYQJcOBR7OBP3UW7aulka1N/K5QYP8yvDg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nADgAqwhXDDYlppCm1EYduCAbpCkKR7/44nPZsTn89z/YMPQ/F5hLqxGN9yhUciuL4+gdxY6pTTPPyy82ab6QqcK7uulOVXnh20lCm9CknK8c4/TUPBkGZ66sNRdZcAXrP0RMQqKxvCVczfUEcTntJlWgvXOZxl/CXve6lmGgn4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Xr+jbLBZ; 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="Xr+jbLBZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5A445C4CEEB; Fri, 18 Jul 2025 11:34:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752838475; bh=E2lm3aHfVHYQJcOBR7OBP3UW7aulka1N/K5QYP8yvDg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Xr+jbLBZhIRHDzUJi3m/Vt8b39qxBCbbTcWpAwiKboRfAVbVg//fKETig0wCRnzCL 9mYCxj45jIDICgtliairx7wijvyI2iGtZJYWzb+J3tyyVvYiBRCGkvMPvsfwL3cGS4 CAf8B9YsJP8+rex6xhmIRdJKWWfXQJdfTgKgBC0stzusmcjiKyfNFzOAy30K99ci00 9BXdkZtf+KIHdaB2suancU3FX6uqZFHXwXkkBPV+BoXj4WwRwExjgJML7WQIgdpTg6 mYd1AS/Hw4BOgs11RGkemX4bIKnEgWmNmqX6zKwZz9WcEag8tw1r+F6kRei1hEnd3s XhRa6nPWrdz2w== 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 3/5] tracing: kprobe-event: Allocate string buffers from heap Date: Fri, 18 Jul 2025 20:34:29 +0900 Message-ID: <175283846936.343578.3747359008449354291.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175283843771.343578.8524137568048302760.stgit@devnote2> References: <175283843771.343578.8524137568048302760.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 15d7a381a128..793af6000f16 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 17:06:48 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 1AF492D9498; Fri, 18 Jul 2025 11:34:45 +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=1752838486; cv=none; b=T2ZydgKyfEsfHtTHCw7ULE5npvDBx8ow24velizykJ1A7X9d9XJYczpKEJuiZyezWhnfQb1IgWdMuBuSpsg3UPWO5pYfsbtXNxaopHnB63PtfDwLvVCa1kZhlG1qDcNSUw5sGGzkmR6uz5LR8Xmns6Tmoixf/0GfQ6StxL0zCxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752838486; c=relaxed/simple; bh=Lzo7hIsuSu19X6bNrAGPaKlHyr6A69CrRZrO8+MMXHM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gLCkSulhqn28J+q0z91PILRvJiwfgUXZOUsn4vHvA3xXne4cV7kL4G+2OJ0q99JdJs3FCzN5j+/VFWFHafu9Pe9Go3YKHwTk2ZMpVgcQ03amUgJAxrPbx4KoSbb8U2+ii81PmaYbzdlADx2n+N/TWOtzAHwQd+e2sCiN0j2v+A4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VPFHZRAl; 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="VPFHZRAl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 363DEC4CEEB; Fri, 18 Jul 2025 11:34:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752838485; bh=Lzo7hIsuSu19X6bNrAGPaKlHyr6A69CrRZrO8+MMXHM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VPFHZRAlotkz8dgLtt3vUreQNWVCwAq1o8cfMggsbp5ccF2d3Ez6h1yj8GzuXdMph DNFFzCyI/1O/7C0Fyk3UZ7Yo3phzVmkHZBu4LqMtPmbDx0ijC2mo65QBMFHNCUO9x7 jYXrCO78kk5vPDasboEd+WKv4LwY9AFp+K7Vg59Gc0EMtp+7F5MZeTAc275CiqVSt0 Gemv7+bkJd3sS9VT/VMMSscj3dzEO5mzfcVeCvFRl3SKX6EQX5FNkRGZvWCa8/0kzu 2kTfkJn2lDv4iiWTJhkPO9qr692PZfpr3XQZg0pfTy2JR2tuqtkuCLTcoy5s2QPkip Dm4wO6asLOHCw== 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 4/5] tracing: eprobe-event: Allocate string buffers from heap Date: Fri, 18 Jul 2025 20:34:40 +0900 Message-ID: <175283848063.343578.12113784863348416166.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175283843771.343578.8524137568048302760.stgit@devnote2> References: <175283843771.343578.8524137568048302760.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) --- kernel/trace/trace_eprobe.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 1e18a8619b40..75d8208cd859 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,11 @@ 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) { + ret =3D -ENOMEM; + goto parse_error; + } event++; ret =3D traceprobe_parse_event_name(&event, &group, gbuf, event - argv[0]); @@ -894,6 +900,12 @@ 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) { + ret =3D -ENOMEM; + goto parse_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 +913,11 @@ 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) { + ret =3D -ENOMEM; + goto error; + } event =3D buf1; } From nobody Mon Oct 6 17:06:48 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 B6E8A2BE023; Fri, 18 Jul 2025 11:34:56 +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=1752838496; cv=none; b=skP5no6RIKIrJXde7HNxaSFuZV2WGVBQppDyPwvaoNJR51yej+kwXLT0yAYLbSkhSH3eeJFlH1jUGMJSzw0Lmhd6uL5FEyQUaVwp4F80pyugUmD8TXllA6frdPWFZRA4LtwMN99Q1dKVZa+oCJes7MlNXT7Ht8io8wDZusQ3jeg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752838496; c=relaxed/simple; bh=qyRKxjwTN7xtPYNLZgbxC3CFLiEFgy61lESI3NNCjcI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=t7WBOgEBs/k5gD1B0EHfzYiXZ9fVmvB7qYbBVvN4iBH1eKlKBgTr7Bx3/AtvC1hekGLqoW6SNXLQR//dTF8LEIgC/O9KfTWiR0Gmd3xbmPoxzbW2BrOJz/ynssZzCNQAuwY80plSPHrv+cgqRoK9SWyfvlqnHZiXrsbR3FAjOzQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b/H/KfUW; 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="b/H/KfUW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D4DE7C4CEEB; Fri, 18 Jul 2025 11:34:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752838496; bh=qyRKxjwTN7xtPYNLZgbxC3CFLiEFgy61lESI3NNCjcI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b/H/KfUWNzM1EgpJK5sJTRrRYAF+KAKTpDspd/mMo/aB578qJvCvVXsH5oo1E8Wkc PtgIqlTxBZSW/YmWaQ02mZcHvJgkY4ShGwv4TpEg01hgrwHiEKYt1DwC0SjNiGKF50 cLL2iF7hrBdbFw8bsYXqCLsE1chvS8IF3oDeicWr1LJ1/KIwbH749M54L5lCFNm6Lc UCGAAwjjiE8nRfUr9As43UmjOJCdU+YLnqlNm6TCF4iam5mtK+sBV0QdNnTISLwSy7 j8nj7yGNIjzPSmMq8deALahXxeEJhcfhacqAQRCwotfHRu69PA/sgPgkmThzhdxhl6 dO+fdhzkOImpQ== 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 5/5] tracing: uprobe-event: Allocate string buffers from heap Date: Fri, 18 Jul 2025 20:34:51 +0900 Message-ID: <175283849142.343578.11299469553352925660.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <175283843771.343578.8524137568048302760.stgit@devnote2> References: <175283843771.343578.8524137568048302760.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) --- kernel/trace/trace_uprobe.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 1fd479718d03..17124769e254 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -7,6 +7,7 @@ */ #define pr_fmt(fmt) "trace_uprobe: " fmt =20 +#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" @@ -538,15 +540,15 @@ static int register_trace_uprobe(struct trace_uprobe = *tu) static int __trace_uprobe_create(int argc, const char **argv) { struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) =3D= NULL; - 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; @@ -654,6 +656,11 @@ 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) { + ret =3D -ENOMEM; + goto fail_address_parse; + } ret =3D traceprobe_parse_event_name(&event, &group, gbuf, event - argv[0]); if (ret) @@ -674,6 +681,11 @@ static int __trace_uprobe_create(int argc, const char = **argv) if (ptr) *ptr =3D '\0'; =20 + buf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); + if (!buf) { + ret =3D -ENOMEM; + goto fail_address_parse; + } snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_0x%lx", 'p', tail, offset); event =3D buf; kfree(tail);