net: Change the layout of structure trace_event_raw_fib_table_lookup
authorZong Li <zong@andestech.com>
Mon, 13 Aug 2018 02:26:52 +0000 (10:26 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 Aug 2018 16:21:05 +0000 (09:21 -0700)
There is an unalignment access about the structure
'trace_event_raw_fib_table_lookup'.

In include/trace/events/fib.h, there is a memory operation which casting
the 'src' data member to a pointer, and then store a value to this
pointer point to.

p32 = (__be32 *) __entry->src;
*p32 = flp->saddr;

The offset of 'src' in structure trace_event_raw_fib_table_lookup is not
four bytes alignment. On some architectures, they don't permit the
unalignment access, it need to pay the price to handle this situation in
exception handler.

Adjust the layout of structure to avoid this case.

Fixes: 9f323973c915 ("net/ipv4: Udate fib_table_lookup tracepoint")
Signed-off-by: Zong Li <zong@andestech.com>
Acked-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/trace/events/fib.h

index 9763cddd0594709e263aada3baaca5510030294b..6271bab63bfb99558ca2895a16c5f3061a9f5b75 100644 (file)
@@ -22,6 +22,7 @@ TRACE_EVENT(fib_table_lookup,
                __field(        int,    err             )
                __field(        int,    oif             )
                __field(        int,    iif             )
+               __field(        u8,     proto           )
                __field(        __u8,   tos             )
                __field(        __u8,   scope           )
                __field(        __u8,   flags           )
@@ -31,7 +32,6 @@ TRACE_EVENT(fib_table_lookup,
                __array(        __u8,   saddr,  4       )
                __field(        u16,    sport           )
                __field(        u16,    dport           )
-               __field(        u8,     proto           )
                __dynamic_array(char,  name,   IFNAMSIZ )
        ),