1 {
2 	"bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_KPROBE",
3 	.insns = {
4 		BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_ktime_get_coarse_ns),
5 		BPF_MOV64_IMM(BPF_REG_0, 0),
6 		BPF_EXIT_INSN(),
7 	},
8 	.errstr = "unknown func bpf_ktime_get_coarse_ns",
9 	.result = REJECT,
10 	.prog_type = BPF_PROG_TYPE_KPROBE,
11 },
12 {
13 	"bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_TRACEPOINT",
14 	.insns = {
15 		BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_ktime_get_coarse_ns),
16 		BPF_MOV64_IMM(BPF_REG_0, 0),
17 		BPF_EXIT_INSN(),
18 	},
19 	.errstr = "unknown func bpf_ktime_get_coarse_ns",
20 	.result = REJECT,
21 	.prog_type = BPF_PROG_TYPE_TRACEPOINT,
22 },
23 {
24 	"bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_PERF_EVENT",
25 	.insns = {
26 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_ktime_get_coarse_ns),
27 	BPF_MOV64_IMM(BPF_REG_0, 0),
28 	BPF_EXIT_INSN(),
29 	},
30 	.errstr = "unknown func bpf_ktime_get_coarse_ns",
31 	.result = REJECT,
32 	.prog_type = BPF_PROG_TYPE_PERF_EVENT,
33 },
34 {
35 	"bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_RAW_TRACEPOINT",
36 	.insns = {
37 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_ktime_get_coarse_ns),
38 	BPF_MOV64_IMM(BPF_REG_0, 0),
39 	BPF_EXIT_INSN(),
40 	},
41 	.errstr = "unknown func bpf_ktime_get_coarse_ns",
42 	.result = REJECT,
43 	.prog_type = BPF_PROG_TYPE_RAW_TRACEPOINT,
44 },
45 {
46 	"bpf_timer_init isn restricted in BPF_PROG_TYPE_KPROBE",
47 	.insns = {
48 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
49 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
50 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
51 	BPF_LD_MAP_FD(BPF_REG_1, 0),
52 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
53 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 4),
54 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
55 	BPF_LD_MAP_FD(BPF_REG_2, 0),
56 	BPF_MOV64_IMM(BPF_REG_3, 1),
57 	BPF_EMIT_CALL(BPF_FUNC_timer_init),
58 	BPF_EXIT_INSN(),
59 	},
60 	.fixup_map_timer = { 3, 8 },
61 	.errstr = "tracing progs cannot use bpf_timer yet",
62 	.result = REJECT,
63 	.prog_type = BPF_PROG_TYPE_KPROBE,
64 },
65 {
66 	"bpf_timer_init is forbidden in BPF_PROG_TYPE_PERF_EVENT",
67 	.insns = {
68 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
69 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
70 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
71 	BPF_LD_MAP_FD(BPF_REG_1, 0),
72 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
73 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 4),
74 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
75 	BPF_LD_MAP_FD(BPF_REG_2, 0),
76 	BPF_MOV64_IMM(BPF_REG_3, 1),
77 	BPF_EMIT_CALL(BPF_FUNC_timer_init),
78 	BPF_EXIT_INSN(),
79 	},
80 	.fixup_map_timer = { 3, 8 },
81 	.errstr = "tracing progs cannot use bpf_timer yet",
82 	.result = REJECT,
83 	.prog_type = BPF_PROG_TYPE_PERF_EVENT,
84 },
85 {
86 	"bpf_timer_init is forbidden in BPF_PROG_TYPE_TRACEPOINT",
87 	.insns = {
88 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
89 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
90 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
91 	BPF_LD_MAP_FD(BPF_REG_1, 0),
92 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
93 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 4),
94 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
95 	BPF_LD_MAP_FD(BPF_REG_2, 0),
96 	BPF_MOV64_IMM(BPF_REG_3, 1),
97 	BPF_EMIT_CALL(BPF_FUNC_timer_init),
98 	BPF_EXIT_INSN(),
99 	},
100 	.fixup_map_timer = { 3, 8 },
101 	.errstr = "tracing progs cannot use bpf_timer yet",
102 	.result = REJECT,
103 	.prog_type = BPF_PROG_TYPE_TRACEPOINT,
104 },
105 {
106 	"bpf_timer_init is forbidden in BPF_PROG_TYPE_RAW_TRACEPOINT",
107 	.insns = {
108 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
109 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
110 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
111 	BPF_LD_MAP_FD(BPF_REG_1, 0),
112 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
113 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 4),
114 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
115 	BPF_LD_MAP_FD(BPF_REG_2, 0),
116 	BPF_MOV64_IMM(BPF_REG_3, 1),
117 	BPF_EMIT_CALL(BPF_FUNC_timer_init),
118 	BPF_EXIT_INSN(),
119 	},
120 	.fixup_map_timer = { 3, 8 },
121 	.errstr = "tracing progs cannot use bpf_timer yet",
122 	.result = REJECT,
123 	.prog_type = BPF_PROG_TYPE_RAW_TRACEPOINT,
124 },
125 {
126 	"bpf_spin_lock is forbidden in BPF_PROG_TYPE_KPROBE",
127 	.insns = {
128 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
129 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
130 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
131 	BPF_LD_MAP_FD(BPF_REG_1, 0),
132 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
133 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
134 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
135 	BPF_EMIT_CALL(BPF_FUNC_spin_lock),
136 	BPF_EXIT_INSN(),
137 	},
138 	.fixup_map_spin_lock = { 3 },
139 	.errstr = "tracing progs cannot use bpf_spin_lock yet",
140 	.result = REJECT,
141 	.prog_type = BPF_PROG_TYPE_KPROBE,
142 },
143 {
144 	"bpf_spin_lock is forbidden in BPF_PROG_TYPE_TRACEPOINT",
145 	.insns = {
146 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
147 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
148 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
149 	BPF_LD_MAP_FD(BPF_REG_1, 0),
150 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
151 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
152 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
153 	BPF_EMIT_CALL(BPF_FUNC_spin_lock),
154 	BPF_EXIT_INSN(),
155 	},
156 	.fixup_map_spin_lock = { 3 },
157 	.errstr = "tracing progs cannot use bpf_spin_lock yet",
158 	.result = REJECT,
159 	.prog_type = BPF_PROG_TYPE_TRACEPOINT,
160 },
161 {
162 	"bpf_spin_lock is forbidden in BPF_PROG_TYPE_PERF_EVENT",
163 	.insns = {
164 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
165 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
166 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
167 	BPF_LD_MAP_FD(BPF_REG_1, 0),
168 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
169 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
170 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
171 	BPF_EMIT_CALL(BPF_FUNC_spin_lock),
172 	BPF_EXIT_INSN(),
173 	},
174 	.fixup_map_spin_lock = { 3 },
175 	.errstr = "tracing progs cannot use bpf_spin_lock yet",
176 	.result = REJECT,
177 	.prog_type = BPF_PROG_TYPE_PERF_EVENT,
178 },
179 {
180 	"bpf_spin_lock is forbidden in BPF_PROG_TYPE_RAW_TRACEPOINT",
181 	.insns = {
182 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
183 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
184 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
185 	BPF_LD_MAP_FD(BPF_REG_1, 0),
186 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
187 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
188 	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
189 	BPF_EMIT_CALL(BPF_FUNC_spin_lock),
190 	BPF_EXIT_INSN(),
191 	},
192 	.fixup_map_spin_lock = { 3 },
193 	.errstr = "tracing progs cannot use bpf_spin_lock yet",
194 	.result = REJECT,
195 	.prog_type = BPF_PROG_TYPE_RAW_TRACEPOINT,
196 },
197