Commit 576ec047 authored by David Carlier's avatar David Carlier Committed by Steven Rostedt
Browse files

tracing: Avoid NULL return from hist_field_name() on truncation

hist_field_name() returns "" everywhere except the fully-qualified
VAR_REF/EXPR case, where snprintf() truncation returns NULL early
and bypasses the bottom NULL->"" guard. Callers don't expect NULL:
strcat(expr, hist_field_name(field, 0)) at trace_events_hist.c:1758
and the strcmp() in the sort-key match loop at :4804 both deref it.

system and event_name are bounded by MAX_EVENT_NAME_LEN, but the
field name on a VAR_REF is kstrdup'd from a histogram variable
name parsed out of the trigger string and has no length cap, so
a long enough var name in a fully qualified reference can reach
the truncation path.

Keep the length check but leave field_name as "" on overflow.

Link: https://patch.msgid.link/20260508195747.25492-1-devnexen@gmail.com


Fixes: 5ec1d1e9 ("tracing: Rebuild full_name on each hist_field_name() call")
Signed-off-by: default avatarDavid Carlier <devnexen@gmail.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 5200f5f4
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -1369,9 +1369,7 @@ static const char *hist_field_name(struct hist_field *field,
			len = snprintf(full_name, sizeof(full_name), fmt,
				       field->system, field->event_name,
				       field->name);
			if (len >= sizeof(full_name))
				return NULL;

			if (len < sizeof(full_name))
				field_name = full_name;
		} else
			field_name = field->name;