From: Steven Rostedt <rostedt@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Andrew Morton <akpm@linux-foundation.org>,
stable@vger.kernel.org,
Donggeun Yoo <donggeunyoo.kernel@gmail.com>
Subject: [for-linus][PATCH 04/16] tracing: Fix the shift out of bounds in the log2 histogram modifier
Date: Thu, 15 Oct 2026 09:33:14 -0400 [thread overview]
Message-ID: <20261015133402.725501079@kernel.org> (raw)
In-Reply-To: 20261015133310.731003448@kernel.org
From: Donggeun Yoo <donggeunyoo.kernel@gmail.com>
The .log2 key modifier files a value under its base-2 order:
# echo 'hist:keys=bytes_req.log2' > events/kmem/kmalloc/trigger
hist_field_log2() computes that as ilog2(roundup_pow_of_two(val)). The
out-of-line form of roundup_pow_of_two() is
return 1UL << fls_long(n - 1);
which shifts by 64 on a 64-bit kernel both when n is 0, where n - 1
wraps to ULONG_MAX, and when n is above 2^63. Both are ordinary keys,
because the field fetch hands every value over as a u64: a syscall
argument of 0 reaches the first, and one above 2^63 reaches the second.
Keying sys_enter_lseek on offset.log2 and passing 0, 1, 2, 3, 1000,
2^63+1 and U64_MAX gives
{ offset: ~ 2^1 } hitcount: 1
{ offset: ~ 2^10 } hitcount: 1
{ offset: ~ 2^2 } hitcount: 1
{ offset: ~ 2^0 } hitcount: 4
Keys above 2^63 land in the lowest bucket. With CONFIG_UBSAN_SHIFT=y
the shift is also reported:
UBSAN: shift-out-of-bounds in include/linux/log2.h:57:13
shift exponent 64 is too large for 64-bit type 'long unsigned int'
__ubsan_handle_shift_out_of_bounds.cold+0xdd/0x1cb
hist_fn_call.cold+0x8b/0xd9
event_hist_trigger+0x1cc/0x790
ftrace_syscall_enter+0x197/0x360
do_syscall_64+0x402/0x4b0
Use order_base_2(), which is ilog2(n - 1) + 1 for n > 1 and 0 below
that. It returns what the old expression returned on every input the
old one was defined for. Where it was not, 0 stays in bucket 0, which
is where x86_64 had been putting it, and the keys above 2^63 move into
bucket 64.
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260916002735.808520-1-donggeunyoo.kernel@gmail.com
Fixes: 4b94f5b7b4a5 ("tracing: Add hist trigger 'log2' modifier")
Signed-off-by: Donggeun Yoo <donggeunyoo.kernel@gmail.com>
Assisted-by: Claude:claude-fable-5
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace_events_hist.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index b3df8862855f..71d7f43a7964 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -289,7 +289,7 @@ static u64 hist_field_log2(struct hist_field *hist_field,
u64 val = hist_fn_call(operand, elt, buffer, rbe, event);
- return (u64) ilog2(roundup_pow_of_two(val));
+ return order_base_2(val);
}
static u64 hist_field_bucket(struct hist_field *hist_field,
--
2.53.0
next prev parent reply other threads:[~2026-10-15 13:34 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 13:33 [for-linus][PATCH 00/16] tracing: Fixes for v7.3 Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 01/16] tracing: Fix NULL dereference when copying keys for a field variable Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 02/16] tracing: Take trace_types_lock when dropping the buffer_meta reference Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 03/16] ring-buffer: Do not show buffer_meta for CPUs without a buffer Steven Rostedt
2026-10-15 13:33 ` Steven Rostedt [this message]
2026-10-15 13:33 ` [for-linus][PATCH 05/16] ring-buffer: Fix the sub-buffer array base in rb_meta_subbuf_idx() Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 06/16] tracing: Fix empty symbol names in simple_ring_buffer undef check Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 07/16] tracing: Fix simple_ring_buffer undef check on parisc Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 08/16] tracing: Fix simple_ring_buffer undef check on sparc64 Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 09/16] ring-buffer: Fix false warning in ring_buffer_map_get_reader() Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 10/16] tracing: Fix ignored return value of resize_buffer_duplicate_size() Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 11/16] tracing: Fix hist trigger timestamps for buffered events Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 12/16] tracing: Do not initialize tracefs work if tracing is disabled Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 13/16] eventfs: Free the eventfs_inode after an rcu grace period too Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 14/16] ring-buffer: Skip si_mem_available() for persistent and remote buffers Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 15/16] ring-buffer: Use subbuf_order in available memory estimation Steven Rostedt
2026-10-15 13:33 ` [for-linus][PATCH 16/16] tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261015133402.725501079@kernel.org \
--to=rostedt@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=donggeunyoo.kernel@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.