samples/bpf: xdp_monitor first 8 bytes are not accessible by bpf
authorJesper Dangaard Brouer <brouer@redhat.com>
Fri, 6 Oct 2017 08:41:41 +0000 (10:41 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 6 Oct 2017 17:04:35 +0000 (10:04 -0700)
The first 8 bytes of the tracepoint context struct are not accessible
by the bpf code.  This is a choice that dates back to the original
inclusion of this code.

See explaination in:
 commit 98b5c2c65c29 ("perf, bpf: allow bpf programs attach to tracepoints")

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
samples/bpf/xdp_monitor_kern.c

index 74f3fd8ed729533d55406336fd1d3b03b4ede5fe..cc7e19d2ad760e1b917d31ae44d0b1005ec20e61 100644 (file)
@@ -17,19 +17,15 @@ struct bpf_map_def SEC("maps") redirect_err_cnt = {
  * Code in:                kernel/include/trace/events/xdp.h
  */
 struct xdp_redirect_ctx {
-       unsigned short common_type;     //      offset:0;  size:2; signed:0;
-       unsigned char common_flags;     //      offset:2;  size:1; signed:0;
-       unsigned char common_preempt_count;//   offset:3;  size:1; signed:0;
-       int common_pid;                 //      offset:4;  size:4; signed:1;
-
-       int prog_id;                    //      offset:8;  size:4; signed:1;
-       u32 act;                        //      offset:12  size:4; signed:0;
-       int ifindex;                    //      offset:16  size:4; signed:1;
-       int err;                        //      offset:20  size:4; signed:1;
-       int to_ifindex;                 //      offset:24  size:4; signed:1;
-       u32 map_id;                     //      offset:28  size:4; signed:0;
-       int map_index;                  //      offset:32  size:4; signed:1;
-};                                     //      offset:36
+       u64 __pad;              // First 8 bytes are not accessible by bpf code
+       int prog_id;            //      offset:8;  size:4; signed:1;
+       u32 act;                //      offset:12  size:4; signed:0;
+       int ifindex;            //      offset:16  size:4; signed:1;
+       int err;                //      offset:20  size:4; signed:1;
+       int to_ifindex;         //      offset:24  size:4; signed:1;
+       u32 map_id;             //      offset:28  size:4; signed:0;
+       int map_index;          //      offset:32  size:4; signed:1;
+};                             //      offset:36
 
 enum {
        XDP_REDIRECT_SUCCESS = 0,