From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 0375443635D for ; Fri, 22 May 2026 14:35:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779460504; cv=none; b=sCkiw/mJuLmCzu9t0Dj69pHqwzhmQlZ/YyjLzm6v1IgcIyWUcaPFQHa3/sSjzFmVgL+YD+9sgEL3zThRp5mmvWu5GIh5yXohQ/FANX7GpT/H78mpm56lnfITkurOZ+634uY+6nG+sbu4mvN9U9KeSHY5ioCBvzJGqpLN+wgRnHo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779460504; c=relaxed/simple; bh=4+QKmBlA1KIDu/ZJroN63SmQpgTG1FwOxiyt9EDWBVw=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=eMQndKLJvp5bRg0rOFBqCcCqWvMTomu6gd3E6P59I7YXJ2/HmMPM1UplviY48cUpytZ3Ase82+7MAGa+R2Jdvrgx/dhTfdkMe0ZiUmKVp5toDtdtCW7lj9zyaRiDj8rkak+THviEykbHvLoiVg3dT6r9sv1YrKNB+Lz7KHoRx+E= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GwnUoxkv; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GwnUoxkv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DBE691F00ADF; Fri, 22 May 2026 14:35:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779460501; bh=LM89YYi/g3sQsg8aXAM5rWVMCRdZG1KcqZMcYI39TZU=; h=Date:From:To:Cc:Subject:References; b=GwnUoxkvhnRlezua5dndE/Vtqx1PU9JIsaIzM0OrCrxkDdfG13ebF33t4yt7pclhz PMjCP+R8BQQatrA6Q394gPavvBKFOX5n0QUMP2dCoE+7gbII01iItlpResjAFrTZSk M4bUtTQB4Y0UXldqsoI3qtOYbJMjFDKMBeSZ8TOgt8RaAkf0zCZUAq6G+2e1mPoT80 iwSGFYU9rJzpR11oW2UJSfRFd1laIpfaJiHmjixQj/mNtfvv8YSDeov+EHtmYyGoVH 5lOpK8u/GtrM67MoLHELat61Xclfmy7DhSoinuz+6BP23BkhZdKhQefYIfewIAUnVJ +r5BYtFJraVaQ== Received: from rostedt by gandalf with local (Exim 4.99.2) (envelope-from ) id 1wQQyD-00000006679-2ETJ; Fri, 22 May 2026 10:35:25 -0400 Message-ID: <20260522143525.374444253@kernel.org> User-Agent: quilt/0.69 Date: Fri, 22 May 2026 10:35:11 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Tom Zanussi , Tom Zanussi , Pengpeng Hou Subject: [for-next][PATCH 03/15] tracing: Bound synthetic-field strings with seq_buf References: <20260522143508.298439732@kernel.org> 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 From: Pengpeng Hou The synthetic field helpers build a prefixed synthetic variable name and a generated hist command in fixed MAX_FILTER_STR_VAL buffers. The current code appends those strings with raw strcat(), so long key lists, field names, or saved filters can run past the end of the staging buffers. Build both strings with seq_buf and propagate -E2BIG if either the synthetic variable name or the generated command exceeds MAX_FILTER_STR_VAL. This keeps the existing tracing-side limit while using the helper intended for bounded command construction. Cc: Mathieu Desnoyers Cc: Tom Zanussi Link: https://patch.msgid.link/20260430043350.57928-1-pengpeng@iscas.ac.cn Fixes: 02205a6752f2 ("tracing: Add support for 'field variables'") Acked-by: Masami Hiramatsu (Google) Reviewed-by: Tom Zanussi Signed-off-by: Pengpeng Hou [ sdr: Moved struct seq_buf *s for upside-down x-mas tree formatting ] Signed-off-by: Steven Rostedt --- kernel/trace/trace_events_hist.c | 41 ++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index eb2c2bc8bc3d..9701650c89b2 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -2967,13 +2968,22 @@ find_synthetic_field_var(struct hist_trigger_data *target_hist_data, { struct hist_field *event_var; char *synthetic_name; + struct seq_buf s; synthetic_name = kzalloc(MAX_FILTER_STR_VAL, GFP_KERNEL); if (!synthetic_name) return ERR_PTR(-ENOMEM); - strcpy(synthetic_name, "synthetic_"); - strcat(synthetic_name, field_name); + seq_buf_init(&s, synthetic_name, MAX_FILTER_STR_VAL); + seq_buf_printf(&s, "synthetic_%s", field_name); + + /* Terminate synthetic_name with a NUL. */ + seq_buf_str(&s); + + if (seq_buf_has_overflowed(&s)) { + kfree(synthetic_name); + return ERR_PTR(-E2BIG); + } event_var = find_event_var(target_hist_data, system, event_name, synthetic_name); @@ -3019,6 +3029,7 @@ create_field_var_hist(struct hist_trigger_data *target_hist_data, struct hist_field *key_field; struct hist_field *event_var; char *saved_filter; + struct seq_buf s; char *cmd; int ret; @@ -3063,28 +3074,34 @@ create_field_var_hist(struct hist_trigger_data *target_hist_data, return ERR_PTR(-ENOMEM); } + seq_buf_init(&s, cmd, MAX_FILTER_STR_VAL); + /* Use the same keys as the compatible histogram */ - strcat(cmd, "keys="); + seq_buf_puts(&s, "keys="); for_each_hist_key_field(i, hist_data) { key_field = hist_data->fields[i]; if (!first) - strcat(cmd, ","); - strcat(cmd, key_field->field->name); + seq_buf_putc(&s, ','); + seq_buf_puts(&s, key_field->field->name); first = false; } /* Create the synthetic field variable specification */ - strcat(cmd, ":synthetic_"); - strcat(cmd, field_name); - strcat(cmd, "="); - strcat(cmd, field_name); + seq_buf_printf(&s, ":synthetic_%s=%s", field_name, field_name); /* Use the same filter as the compatible histogram */ saved_filter = find_trigger_filter(hist_data, file); - if (saved_filter) { - strcat(cmd, " if "); - strcat(cmd, saved_filter); + if (saved_filter) + seq_buf_printf(&s, " if %s", saved_filter); + + /* Terminate cmd with a NUL. */ + seq_buf_str(&s); + + if (seq_buf_has_overflowed(&s)) { + kfree(cmd); + kfree(var_hist); + return ERR_PTR(-E2BIG); } var_hist->cmd = kstrdup(cmd, GFP_KERNEL); -- 2.53.0