Re: [PATCH] perf trace: Format fields with hex specifiers in print_fmt as hexadecimal
Aaron Tomlin <[email protected]> Mon, 3 Aug 2026 08:45:16 -0400
| Newsgroups | org.kernel.vger.linux-perf-users |
|---|---|
| Message-ID | <w6k5v3c7qtjqb7a7lgeqdci4olligryfyiozul2xwiurumzp4u@zv7gwvhev7tl> |
On Fri, Jul 31, 2026 at 10:12:03PM +0000, [email protected] wrote: > Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: > - [Medium] field_has_hex_fmt() prematurely truncates the format string search when it encounters escaped quotes. > -- > > --- Patch [1]: [PATCH] perf trace: Format fields with hex specifiers in print_fmt as hexadecimal --- > commit 1d9edf5adf3cf666d7e9393e5db036cd73d6656a > Author: Aaron Tomlin <[email protected]> > > perf trace: Format fields with hex specifiers in print_fmt as hexadecimal > > This commit introduces field_has_hex_fmt to inspect tracepoint print_fmt > strings. If a field uses hexadecimal specifiers, it assigns SCA_PTR formatting > to display the value in hexadecimal by default. > > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > > index ba0f8749fc7d7..b0ce9c2a24e57 100644 > > --- a/tools/perf/builtin-trace.c > > +++ b/tools/perf/builtin-trace.c > [ ... ] > > @@ -2098,6 +2098,37 @@ static bool is_internal_field(struct tep_format_field *field) > > return !strcmp(field->type, "__data_loc char[]"); > > } > > > > +static bool field_has_hex_fmt(struct tep_format_field *field, int len) > > +{ > > + const char *fmt, *pos, *end; > > + > > + if (!field || !field->event || !field->event->print_fmt.format) > > + return false; > > + > > + fmt = field->event->print_fmt.format; > > + > > + /* Limit scanning strictly to the quoted printf format string */ > > + if (*fmt == '"') { > > + fmt++; > > + end = strchr(fmt, '"'); > > [Severity: Medium] > Does this parsing correctly handle escaped quotes inside the format string? > > If a tracepoint format string contains an escaped quote, this strchr call > will incorrectly match it as the end of the format string, causing the end > pointer to be prematurely truncated. > > > + } else { > > + end = strchr(fmt, ','); > > + } > > + > > + for (pos = strstr(fmt, field->name); pos && (!end || pos < end); pos = strstr(pos + 1, field->name)) { > > [Severity: Medium] > Because the end pointer can be truncated by an escaped quote earlier, won't > the pos < end loop condition evaluate to false for any fields positioned after > that escaped quote? > > This seems like it would skip hex format detection for those subsequent fields, > causing them to fall back to default decimal formatting. > > > + if (pos == fmt || !(isalnum(pos[-1]) || pos[-1] == '_')) { > > + const char *after = pos + len; > [ ... ] > > -- > Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=1 Hi Arnaldo, Namhyung, Jiri, Ian, I have updated the field_has_hex_fmt() function to use an escape-aware scanner that explicitly skips backslash-escaped characters when seeking the closing quote. I shall send through a v2 containing this fix shortly. Kind regards, -- Aaron Tomlin