]> git.baikalelectronics.ru Git - kernel.git/commit
tracing: Silence GCC 9 array bounds warning
authorMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Thu, 23 May 2019 12:45:35 +0000 (14:45 +0200)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Sun, 26 May 2019 03:04:30 +0000 (23:04 -0400)
commit7030deb424a334e771cdc9ec7aa5d00d0bc1f1ef
treef89121ef5eea42f3edb1febfb28181721f153efc
parentca1700a7a3ae6281ad2c7e335875b5b2b5b1e1ea
tracing: Silence GCC 9 array bounds warning

Starting with GCC 9, -Warray-bounds detects cases when memset is called
starting on a member of a struct but the size to be cleared ends up
writing over further members.

Such a call happens in the trace code to clear, at once, all members
after and including `seq` on struct trace_iterator:

    In function 'memset',
        inlined from 'ftrace_dump' at kernel/trace/trace.c:8914:3:
    ./include/linux/string.h:344:9: warning: '__builtin_memset' offset
    [8505, 8560] from the object at 'iter' is out of the bounds of
    referenced subobject 'seq' with type 'struct trace_seq' at offset
    4368 [-Warray-bounds]
      344 |  return __builtin_memset(p, c, size);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

In order to avoid GCC complaining about it, we compute the address
ourselves by adding the offsetof distance instead of referring
directly to the member.

Since there are two places doing this clear (trace.c and trace_kdb.c),
take the chance to move the workaround into a single place in
the internal header.

Link: http://lkml.kernel.org/r/20190523124535.GA12931@gmail.com
Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
[ Removed unnecessary parenthesis around "iter" ]
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace.c
kernel/trace/trace.h
kernel/trace/trace_kdb.c