Skip to content

Commit b528c7f

Browse files
rostedtgregkh
authored andcommitted
tracing/probes: Limit size of event probe to 3K
commit b2aa3b4 upstream. There currently isn't a max limit an event probe can be. One could make an event greater than PAGE_SIZE, which makes the event useless because if it's bigger than the max event that can be recorded into the ring buffer, then it will never be recorded. A event probe should never need to be greater than 3K, so make that the max size. As long as the max is less than the max that can be recorded onto the ring buffer, it should be fine. Cc: stable@vger.kernel.org Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Fixes: 93ccae7 ("tracing/kprobes: Support basic types on dynamic events") Link: https://patch.msgid.link/20260428122302.706610ba@gandalf.local.home Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent d50ef35 commit b528c7f

2 files changed

Lines changed: 9 additions & 1 deletion

File tree

kernel/trace/trace_probe.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,6 +1523,12 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size,
15231523
parg->offset = *size;
15241524
*size += parg->type->size * (parg->count ?: 1);
15251525

1526+
if (*size > MAX_PROBE_EVENT_SIZE) {
1527+
ret = -E2BIG;
1528+
trace_probe_log_err(ctx->offset, EVENT_TOO_BIG);
1529+
goto fail;
1530+
}
1531+
15261532
if (parg->count) {
15271533
len = strlen(parg->type->fmttype) + 6;
15281534
parg->fmt = kmalloc(len, GFP_KERNEL);

kernel/trace/trace_probe.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#define MAX_BTF_ARGS_LEN 128
3939
#define MAX_DENTRY_ARGS_LEN 256
4040
#define MAX_STRING_SIZE PATH_MAX
41+
#define MAX_PROBE_EVENT_SIZE 3072
4142

4243
/* Reserved field names */
4344
#define FIELD_STRING_IP "__probe_ip"
@@ -561,7 +562,8 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call,
561562
C(BAD_TYPE4STR, "This type does not fit for string."),\
562563
C(NEED_STRING_TYPE, "$comm and immediate-string only accepts string type"),\
563564
C(TOO_MANY_ARGS, "Too many arguments are specified"), \
564-
C(TOO_MANY_EARGS, "Too many entry arguments specified"),
565+
C(TOO_MANY_EARGS, "Too many entry arguments specified"), \
566+
C(EVENT_TOO_BIG, "Event too big (too many fields?)"),
565567

566568
#undef C
567569
#define C(a, b) TP_ERR_##a

0 commit comments

Comments
 (0)