lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 770/779] tracing/perf: Avoid -Warray-bounds warning for __rel_loc macro
    Date
    From: Kees Cook <keescook@chromium.org>

    commit c6d777acdf8f62d4ebaef0e5c6cd8fedbd6e8546 upstream.

    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: 55de2c0b5610c ("tracing: Add '__rel_loc' using trace event macros")
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    include/trace/perf.h | 5 +++--
    include/trace/trace_events.h | 2 +-
    2 files changed, 4 insertions(+), 3 deletions(-)

    --- a/include/trace/perf.h
    +++ b/include/trace/perf.h
    @@ -23,8 +23,9 @@

    #undef __get_rel_dynamic_array
    #define __get_rel_dynamic_array(field) \
    - ((void *)(&__entry->__rel_loc_##field) + \
    - sizeof(__entry->__rel_loc_##field) + \
    + ((void *)__entry + \
    + offsetof(typeof(*__entry), __rel_loc_##field) + \
    + sizeof(__entry->__rel_loc_##field) + \
    (__entry->__rel_loc_##field & 0xffff))

    #undef __get_rel_dynamic_array_len
    --- a/include/trace/trace_events.h
    +++ b/include/trace/trace_events.h
    @@ -128,7 +128,7 @@ TRACE_MAKE_SYSTEM_STR();
    struct trace_event_raw_##name { \
    struct trace_entry ent; \
    tstruct \
    - char __data[0]; \
    + char __data[]; \
    }; \
    \
    static struct trace_event_class event_class_##name;

    \
     
     \ /
      Last update: 2022-08-15 22:05    [W:3.123 / U:0.576 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site