Commit c6d777ac authored by Kees Cook's avatar Kees Cook Committed by Steven Rostedt (Google)

tracing/perf: Avoid -Warray-bounds warning for __rel_loc macro

As done for trace_events.h, also fix the __rel_loc macro in perf.h,
which silences the -Warray-bounds warning:

In file included from ./include/linux/string.h:253,
                 from ./include/linux/bitmap.h:11,
                 from ./include/linux/cpumask.h:12,
                 from ./include/linux/mm_types_task.h:14,
                 from ./include/linux/mm_types.h:5,
                 from ./include/linux/buildid.h:5,
                 from ./include/linux/module.h:14,
                 from samples/trace_events/trace-events-sample.c:2:
In function '__fortify_strcpy',
    inlined from 'perf_trace_foo_rel_loc' at samples/trace_events/./trace-events-sample.h:519:1:
./include/linux/fortify-string.h:47:33: warning: '__builtin_strcpy' offset 12 is out of the bounds [
0, 4] [-Warray-bounds]
   47 | #define __underlying_strcpy     __builtin_strcpy
      |                                 ^
./include/linux/fortify-string.h:445:24: note: in expansion of macro '__underlying_strcpy'
  445 |                 return __underlying_strcpy(p, q);
      |                        ^~~~~~~~~~~~~~~~~~~

Also make __data struct member a proper flexible array to avoid future
problems.

Link: https://lkml.kernel.org/r/20220125220037.2738923-1-keescook@chromium.org

Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Fixes: 55de2c0b ("tracing: Add '__rel_loc' using trace event macros")
Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 58c5724e
...@@ -23,7 +23,8 @@ ...@@ -23,7 +23,8 @@
#undef __get_rel_dynamic_array #undef __get_rel_dynamic_array
#define __get_rel_dynamic_array(field) \ #define __get_rel_dynamic_array(field) \
((void *)(&__entry->__rel_loc_##field) + \ ((void *)__entry + \
offsetof(typeof(*__entry), __rel_loc_##field) + \
sizeof(__entry->__rel_loc_##field) + \ sizeof(__entry->__rel_loc_##field) + \
(__entry->__rel_loc_##field & 0xffff)) (__entry->__rel_loc_##field & 0xffff))
......
...@@ -128,7 +128,7 @@ TRACE_MAKE_SYSTEM_STR(); ...@@ -128,7 +128,7 @@ TRACE_MAKE_SYSTEM_STR();
struct trace_event_raw_##name { \ struct trace_event_raw_##name { \
struct trace_entry ent; \ struct trace_entry ent; \
tstruct \ tstruct \
char __data[0]; \ char __data[]; \
}; \ }; \
\ \
static struct trace_event_class event_class_##name; static struct trace_event_class event_class_##name;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment