root/tools/testing/selftests/bpf/verifier/cgroup_skb.c

/* [<][>][^][v][top][bottom][index][help] */
   1 {
   2         "direct packet read test#1 for CGROUP_SKB",
   3         .insns = {
   4         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
   5                     offsetof(struct __sk_buff, data)),
   6         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
   7                     offsetof(struct __sk_buff, data_end)),
   8         BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
   9                     offsetof(struct __sk_buff, len)),
  10         BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1,
  11                     offsetof(struct __sk_buff, pkt_type)),
  12         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
  13                     offsetof(struct __sk_buff, mark)),
  14         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_6,
  15                     offsetof(struct __sk_buff, mark)),
  16         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
  17                     offsetof(struct __sk_buff, queue_mapping)),
  18         BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1,
  19                     offsetof(struct __sk_buff, protocol)),
  20         BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1,
  21                     offsetof(struct __sk_buff, vlan_present)),
  22         BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
  23         BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
  24         BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
  25         BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
  26         BPF_MOV64_IMM(BPF_REG_0, 0),
  27         BPF_EXIT_INSN(),
  28         },
  29         .result = ACCEPT,
  30         .result_unpriv = REJECT,
  31         .errstr_unpriv = "invalid bpf_context access off=76 size=4",
  32         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
  33 },
  34 {
  35         "direct packet read test#2 for CGROUP_SKB",
  36         .insns = {
  37         BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
  38                     offsetof(struct __sk_buff, vlan_tci)),
  39         BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1,
  40                     offsetof(struct __sk_buff, vlan_proto)),
  41         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
  42                     offsetof(struct __sk_buff, priority)),
  43         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_6,
  44                     offsetof(struct __sk_buff, priority)),
  45         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
  46                     offsetof(struct __sk_buff, ingress_ifindex)),
  47         BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1,
  48                     offsetof(struct __sk_buff, tc_index)),
  49         BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1,
  50                     offsetof(struct __sk_buff, hash)),
  51         BPF_MOV64_IMM(BPF_REG_0, 0),
  52         BPF_EXIT_INSN(),
  53         },
  54         .result = ACCEPT,
  55         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
  56 },
  57 {
  58         "direct packet read test#3 for CGROUP_SKB",
  59         .insns = {
  60         BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
  61                     offsetof(struct __sk_buff, cb[0])),
  62         BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1,
  63                     offsetof(struct __sk_buff, cb[1])),
  64         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
  65                     offsetof(struct __sk_buff, cb[2])),
  66         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
  67                     offsetof(struct __sk_buff, cb[3])),
  68         BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1,
  69                     offsetof(struct __sk_buff, cb[4])),
  70         BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1,
  71                     offsetof(struct __sk_buff, napi_id)),
  72         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_4,
  73                     offsetof(struct __sk_buff, cb[0])),
  74         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_5,
  75                     offsetof(struct __sk_buff, cb[1])),
  76         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_6,
  77                     offsetof(struct __sk_buff, cb[2])),
  78         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_7,
  79                     offsetof(struct __sk_buff, cb[3])),
  80         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_8,
  81                     offsetof(struct __sk_buff, cb[4])),
  82         BPF_MOV64_IMM(BPF_REG_0, 0),
  83         BPF_EXIT_INSN(),
  84         },
  85         .result = ACCEPT,
  86         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
  87 },
  88 {
  89         "direct packet read test#4 for CGROUP_SKB",
  90         .insns = {
  91         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
  92                     offsetof(struct __sk_buff, family)),
  93         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
  94                     offsetof(struct __sk_buff, remote_ip4)),
  95         BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
  96                     offsetof(struct __sk_buff, local_ip4)),
  97         BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1,
  98                     offsetof(struct __sk_buff, remote_ip6[0])),
  99         BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1,
 100                     offsetof(struct __sk_buff, remote_ip6[1])),
 101         BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1,
 102                     offsetof(struct __sk_buff, remote_ip6[2])),
 103         BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1,
 104                     offsetof(struct __sk_buff, remote_ip6[3])),
 105         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 106                     offsetof(struct __sk_buff, local_ip6[0])),
 107         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 108                     offsetof(struct __sk_buff, local_ip6[1])),
 109         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 110                     offsetof(struct __sk_buff, local_ip6[2])),
 111         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 112                     offsetof(struct __sk_buff, local_ip6[3])),
 113         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 114                     offsetof(struct __sk_buff, remote_port)),
 115         BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1,
 116                     offsetof(struct __sk_buff, local_port)),
 117         BPF_MOV64_IMM(BPF_REG_0, 0),
 118         BPF_EXIT_INSN(),
 119         },
 120         .result = ACCEPT,
 121         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
 122 },
 123 {
 124         "invalid access of tc_classid for CGROUP_SKB",
 125         .insns = {
 126         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
 127                     offsetof(struct __sk_buff, tc_classid)),
 128         BPF_MOV64_IMM(BPF_REG_0, 0),
 129         BPF_EXIT_INSN(),
 130         },
 131         .result = REJECT,
 132         .errstr = "invalid bpf_context access",
 133         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
 134 },
 135 {
 136         "invalid access of data_meta for CGROUP_SKB",
 137         .insns = {
 138         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
 139                     offsetof(struct __sk_buff, data_meta)),
 140         BPF_MOV64_IMM(BPF_REG_0, 0),
 141         BPF_EXIT_INSN(),
 142         },
 143         .result = REJECT,
 144         .errstr = "invalid bpf_context access",
 145         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
 146 },
 147 {
 148         "invalid access of flow_keys for CGROUP_SKB",
 149         .insns = {
 150         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
 151                     offsetof(struct __sk_buff, flow_keys)),
 152         BPF_MOV64_IMM(BPF_REG_0, 0),
 153         BPF_EXIT_INSN(),
 154         },
 155         .result = REJECT,
 156         .errstr = "invalid bpf_context access",
 157         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
 158 },
 159 {
 160         "invalid write access to napi_id for CGROUP_SKB",
 161         .insns = {
 162         BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1,
 163                     offsetof(struct __sk_buff, napi_id)),
 164         BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_9,
 165                     offsetof(struct __sk_buff, napi_id)),
 166         BPF_MOV64_IMM(BPF_REG_0, 0),
 167         BPF_EXIT_INSN(),
 168         },
 169         .result = REJECT,
 170         .errstr = "invalid bpf_context access",
 171         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
 172 },
 173 {
 174         "write tstamp from CGROUP_SKB",
 175         .insns = {
 176         BPF_MOV64_IMM(BPF_REG_0, 0),
 177         BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0,
 178                     offsetof(struct __sk_buff, tstamp)),
 179         BPF_MOV64_IMM(BPF_REG_0, 0),
 180         BPF_EXIT_INSN(),
 181         },
 182         .result = ACCEPT,
 183         .result_unpriv = REJECT,
 184         .errstr_unpriv = "invalid bpf_context access off=152 size=8",
 185         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
 186 },
 187 {
 188         "read tstamp from CGROUP_SKB",
 189         .insns = {
 190         BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
 191                     offsetof(struct __sk_buff, tstamp)),
 192         BPF_MOV64_IMM(BPF_REG_0, 0),
 193         BPF_EXIT_INSN(),
 194         },
 195         .result = ACCEPT,
 196         .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
 197 },

/* [<][>][^][v][top][bottom][index][help] */