Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0970b5f4 authored by Steven Rostedt (Red Hat)'s avatar Steven Rostedt (Red Hat) Committed by Arnaldo Carvalho de Melo
Browse files

tools lib traceevent: If %s is a pointer, check printk formats



If the format string of TP_printk() contains a %s, and the argument is
not a string, check if the argument is a pointer that might match the
printk_formats that were stored.

Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/20131101215500.698924777@goodmis.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 18900af8
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -3505,6 +3505,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
	struct pevent *pevent = event->pevent;
	struct pevent *pevent = event->pevent;
	struct print_flag_sym *flag;
	struct print_flag_sym *flag;
	struct format_field *field;
	struct format_field *field;
	struct printk_map *printk;
	unsigned long long val, fval;
	unsigned long long val, fval;
	unsigned long addr;
	unsigned long addr;
	char *str;
	char *str;
@@ -3540,6 +3541,11 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
		if (!(field->flags & FIELD_IS_ARRAY) &&
		if (!(field->flags & FIELD_IS_ARRAY) &&
		    field->size == pevent->long_size) {
		    field->size == pevent->long_size) {
			addr = *(unsigned long *)(data + field->offset);
			addr = *(unsigned long *)(data + field->offset);
			/* Check if it matches a print format */
			printk = find_printk(pevent, addr);
			if (printk)
				trace_seq_puts(s, printk->printk);
			else
				trace_seq_printf(s, "%lx", addr);
				trace_seq_printf(s, "%lx", addr);
			break;
			break;
		}
		}