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},
198