1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2026 Meta Platforms, Inc. and affiliates. */
3 #include <linux/bpf.h>
4 #include <linux/bpf_verifier.h>
5 #include <linux/cnum.h>
6 #include <linux/filter.h>
7
8 #define verbose(env, fmt, args...) bpf_verifier_log_write(env, fmt, ##args)
9
10 #define BPF_COMPLEXITY_LIMIT_STATES 64
11
is_may_goto_insn_at(struct bpf_verifier_env * env,int insn_idx)12 static bool is_may_goto_insn_at(struct bpf_verifier_env *env, int insn_idx)
13 {
14 return bpf_is_may_goto_insn(&env->prog->insnsi[insn_idx]);
15 }
16
is_iter_next_insn(struct bpf_verifier_env * env,int insn_idx)17 static bool is_iter_next_insn(struct bpf_verifier_env *env, int insn_idx)
18 {
19 return env->insn_aux_data[insn_idx].is_iter_next;
20 }
21
update_peak_states(struct bpf_verifier_env * env)22 static void update_peak_states(struct bpf_verifier_env *env)
23 {
24 u32 cur_states;
25
26 cur_states = env->explored_states_size + env->free_list_size + env->num_backedges;
27 env->peak_states = max(env->peak_states, cur_states);
28 }
29
30 /* struct bpf_verifier_state->parent refers to states
31 * that are in either of env->{expored_states,free_list}.
32 * In both cases the state is contained in struct bpf_verifier_state_list.
33 */
state_parent_as_list(struct bpf_verifier_state * st)34 static struct bpf_verifier_state_list *state_parent_as_list(struct bpf_verifier_state *st)
35 {
36 if (st->parent)
37 return container_of(st->parent, struct bpf_verifier_state_list, state);
38 return NULL;
39 }
40
41 static bool incomplete_read_marks(struct bpf_verifier_env *env,
42 struct bpf_verifier_state *st);
43
44 /* A state can be freed if it is no longer referenced:
45 * - is in the env->free_list;
46 * - has no children states;
47 */
maybe_free_verifier_state(struct bpf_verifier_env * env,struct bpf_verifier_state_list * sl)48 static void maybe_free_verifier_state(struct bpf_verifier_env *env,
49 struct bpf_verifier_state_list *sl)
50 {
51 if (!sl->in_free_list
52 || sl->state.branches != 0
53 || incomplete_read_marks(env, &sl->state))
54 return;
55 list_del(&sl->node);
56 bpf_free_verifier_state(&sl->state, false);
57 kfree(sl);
58 env->free_list_size--;
59 }
60
61 /* For state @st look for a topmost frame with frame_insn_idx() in some SCC,
62 * if such frame exists form a corresponding @callchain as an array of
63 * call sites leading to this frame and SCC id.
64 * E.g.:
65 *
66 * void foo() { A: loop {... SCC#1 ...}; }
67 * void bar() { B: loop { C: foo(); ... SCC#2 ... }
68 * D: loop { E: foo(); ... SCC#3 ... } }
69 * void main() { F: bar(); }
70 *
71 * @callchain at (A) would be either (F,SCC#2) or (F,SCC#3) depending
72 * on @st frame call sites being (F,C,A) or (F,E,A).
73 */
compute_scc_callchain(struct bpf_verifier_env * env,struct bpf_verifier_state * st,struct bpf_scc_callchain * callchain)74 static bool compute_scc_callchain(struct bpf_verifier_env *env,
75 struct bpf_verifier_state *st,
76 struct bpf_scc_callchain *callchain)
77 {
78 u32 i, scc, insn_idx;
79
80 memset(callchain, 0, sizeof(*callchain));
81 for (i = 0; i <= st->curframe; i++) {
82 insn_idx = bpf_frame_insn_idx(st, i);
83 scc = env->insn_aux_data[insn_idx].scc;
84 if (scc) {
85 callchain->scc = scc;
86 break;
87 } else if (i < st->curframe) {
88 callchain->callsites[i] = insn_idx;
89 } else {
90 return false;
91 }
92 }
93 return true;
94 }
95
96 /* Check if bpf_scc_visit instance for @callchain exists. */
scc_visit_lookup(struct bpf_verifier_env * env,struct bpf_scc_callchain * callchain)97 static struct bpf_scc_visit *scc_visit_lookup(struct bpf_verifier_env *env,
98 struct bpf_scc_callchain *callchain)
99 {
100 struct bpf_scc_info *info = env->scc_info[callchain->scc];
101 struct bpf_scc_visit *visits = info->visits;
102 u32 i;
103
104 if (!info)
105 return NULL;
106 for (i = 0; i < info->num_visits; i++)
107 if (memcmp(callchain, &visits[i].callchain, sizeof(*callchain)) == 0)
108 return &visits[i];
109 return NULL;
110 }
111
112 /* Allocate a new bpf_scc_visit instance corresponding to @callchain.
113 * Allocated instances are alive for a duration of the do_check_common()
114 * call and are freed by free_states().
115 */
scc_visit_alloc(struct bpf_verifier_env * env,struct bpf_scc_callchain * callchain)116 static struct bpf_scc_visit *scc_visit_alloc(struct bpf_verifier_env *env,
117 struct bpf_scc_callchain *callchain)
118 {
119 struct bpf_scc_visit *visit;
120 struct bpf_scc_info *info;
121 u32 scc, num_visits;
122 u64 new_sz;
123
124 scc = callchain->scc;
125 info = env->scc_info[scc];
126 num_visits = info ? info->num_visits : 0;
127 new_sz = sizeof(*info) + sizeof(struct bpf_scc_visit) * (num_visits + 1);
128 info = kvrealloc(env->scc_info[scc], new_sz, GFP_KERNEL_ACCOUNT);
129 if (!info)
130 return NULL;
131 env->scc_info[scc] = info;
132 info->num_visits = num_visits + 1;
133 visit = &info->visits[num_visits];
134 memset(visit, 0, sizeof(*visit));
135 memcpy(&visit->callchain, callchain, sizeof(*callchain));
136 return visit;
137 }
138
139 /* Form a string '(callsite#1,callsite#2,...,scc)' in env->tmp_str_buf */
format_callchain(struct bpf_verifier_env * env,struct bpf_scc_callchain * callchain)140 static char *format_callchain(struct bpf_verifier_env *env, struct bpf_scc_callchain *callchain)
141 {
142 char *buf = env->tmp_str_buf;
143 int i, delta = 0;
144
145 delta += snprintf(buf + delta, TMP_STR_BUF_LEN - delta, "(");
146 for (i = 0; i < ARRAY_SIZE(callchain->callsites); i++) {
147 if (!callchain->callsites[i])
148 break;
149 delta += snprintf(buf + delta, TMP_STR_BUF_LEN - delta, "%u,",
150 callchain->callsites[i]);
151 }
152 delta += snprintf(buf + delta, TMP_STR_BUF_LEN - delta, "%u)", callchain->scc);
153 return env->tmp_str_buf;
154 }
155
156 /* If callchain for @st exists (@st is in some SCC), ensure that
157 * bpf_scc_visit instance for this callchain exists.
158 * If instance does not exist or is empty, assign visit->entry_state to @st.
159 */
maybe_enter_scc(struct bpf_verifier_env * env,struct bpf_verifier_state * st)160 static int maybe_enter_scc(struct bpf_verifier_env *env, struct bpf_verifier_state *st)
161 {
162 struct bpf_scc_callchain *callchain = &env->callchain_buf;
163 struct bpf_scc_visit *visit;
164
165 if (!compute_scc_callchain(env, st, callchain))
166 return 0;
167 visit = scc_visit_lookup(env, callchain);
168 visit = visit ?: scc_visit_alloc(env, callchain);
169 if (!visit)
170 return -ENOMEM;
171 if (!visit->entry_state) {
172 visit->entry_state = st;
173 if (env->log.level & BPF_LOG_LEVEL2)
174 verbose(env, "SCC enter %s\n", format_callchain(env, callchain));
175 }
176 return 0;
177 }
178
179 static int propagate_backedges(struct bpf_verifier_env *env, struct bpf_scc_visit *visit);
180
181 /* If callchain for @st exists (@st is in some SCC), make it empty:
182 * - set visit->entry_state to NULL;
183 * - flush accumulated backedges.
184 */
maybe_exit_scc(struct bpf_verifier_env * env,struct bpf_verifier_state * st)185 static int maybe_exit_scc(struct bpf_verifier_env *env, struct bpf_verifier_state *st)
186 {
187 struct bpf_scc_callchain *callchain = &env->callchain_buf;
188 struct bpf_scc_visit *visit;
189
190 if (!compute_scc_callchain(env, st, callchain))
191 return 0;
192 visit = scc_visit_lookup(env, callchain);
193 if (!visit) {
194 /*
195 * If path traversal stops inside an SCC, corresponding bpf_scc_visit
196 * must exist for non-speculative paths. For non-speculative paths
197 * traversal stops when:
198 * a. Verification error is found, maybe_exit_scc() is not called.
199 * b. Top level BPF_EXIT is reached. Top level BPF_EXIT is not a member
200 * of any SCC.
201 * c. A checkpoint is reached and matched. Checkpoints are created by
202 * is_state_visited(), which calls maybe_enter_scc(), which allocates
203 * bpf_scc_visit instances for checkpoints within SCCs.
204 * (c) is the only case that can reach this point.
205 */
206 if (!st->speculative) {
207 verifier_bug(env, "scc exit: no visit info for call chain %s",
208 format_callchain(env, callchain));
209 return -EFAULT;
210 }
211 return 0;
212 }
213 if (visit->entry_state != st)
214 return 0;
215 if (env->log.level & BPF_LOG_LEVEL2)
216 verbose(env, "SCC exit %s\n", format_callchain(env, callchain));
217 visit->entry_state = NULL;
218 env->num_backedges -= visit->num_backedges;
219 visit->num_backedges = 0;
220 update_peak_states(env);
221 return propagate_backedges(env, visit);
222 }
223
224 /* Lookup an bpf_scc_visit instance corresponding to @st callchain
225 * and add @backedge to visit->backedges. @st callchain must exist.
226 */
add_scc_backedge(struct bpf_verifier_env * env,struct bpf_verifier_state * st,struct bpf_scc_backedge * backedge)227 static int add_scc_backedge(struct bpf_verifier_env *env,
228 struct bpf_verifier_state *st,
229 struct bpf_scc_backedge *backedge)
230 {
231 struct bpf_scc_callchain *callchain = &env->callchain_buf;
232 struct bpf_scc_visit *visit;
233
234 if (!compute_scc_callchain(env, st, callchain)) {
235 verifier_bug(env, "add backedge: no SCC in verification path, insn_idx %d",
236 st->insn_idx);
237 return -EFAULT;
238 }
239 visit = scc_visit_lookup(env, callchain);
240 if (!visit) {
241 verifier_bug(env, "add backedge: no visit info for call chain %s",
242 format_callchain(env, callchain));
243 return -EFAULT;
244 }
245 if (env->log.level & BPF_LOG_LEVEL2)
246 verbose(env, "SCC backedge %s\n", format_callchain(env, callchain));
247 backedge->next = visit->backedges;
248 visit->backedges = backedge;
249 visit->num_backedges++;
250 env->num_backedges++;
251 update_peak_states(env);
252 return 0;
253 }
254
255 /* bpf_reg_state->live marks for registers in a state @st are incomplete,
256 * if state @st is in some SCC and not all execution paths starting at this
257 * SCC are fully explored.
258 */
incomplete_read_marks(struct bpf_verifier_env * env,struct bpf_verifier_state * st)259 static bool incomplete_read_marks(struct bpf_verifier_env *env,
260 struct bpf_verifier_state *st)
261 {
262 struct bpf_scc_callchain *callchain = &env->callchain_buf;
263 struct bpf_scc_visit *visit;
264
265 if (!compute_scc_callchain(env, st, callchain))
266 return false;
267 visit = scc_visit_lookup(env, callchain);
268 if (!visit)
269 return false;
270 return !!visit->backedges;
271 }
272
bpf_update_branch_counts(struct bpf_verifier_env * env,struct bpf_verifier_state * st)273 int bpf_update_branch_counts(struct bpf_verifier_env *env, struct bpf_verifier_state *st)
274 {
275 struct bpf_verifier_state_list *sl = NULL, *parent_sl;
276 struct bpf_verifier_state *parent;
277 int err;
278
279 while (st) {
280 u32 br = --st->branches;
281
282 /* verifier_bug_if(br > 1, ...) technically makes sense here,
283 * but see comment in push_stack(), hence:
284 */
285 verifier_bug_if((int)br < 0, env, "%s:branches_to_explore=%d", __func__, br);
286 if (br)
287 break;
288 err = maybe_exit_scc(env, st);
289 if (err)
290 return err;
291 parent = st->parent;
292 parent_sl = state_parent_as_list(st);
293 if (sl)
294 maybe_free_verifier_state(env, sl);
295 st = parent;
296 sl = parent_sl;
297 }
298 return 0;
299 }
300
301 /* check %cur's range satisfies %old's */
range_within(const struct bpf_reg_state * old,const struct bpf_reg_state * cur)302 static bool range_within(const struct bpf_reg_state *old,
303 const struct bpf_reg_state *cur)
304 {
305 return cnum64_is_subset(old->r64, cur->r64) &&
306 cnum32_is_subset(old->r32, cur->r32);
307 }
308
309 /* If in the old state two registers had the same id, then they need to have
310 * the same id in the new state as well. But that id could be different from
311 * the old state, so we need to track the mapping from old to new ids.
312 * Once we have seen that, say, a reg with old id 5 had new id 9, any subsequent
313 * regs with old id 5 must also have new id 9 for the new state to be safe. But
314 * regs with a different old id could still have new id 9, we don't care about
315 * that.
316 * So we look through our idmap to see if this old id has been seen before. If
317 * so, we require the new id to match; otherwise, we add the id pair to the map.
318 */
check_ids(u32 old_id,u32 cur_id,struct bpf_idmap * idmap)319 static bool check_ids(u32 old_id, u32 cur_id, struct bpf_idmap *idmap)
320 {
321 struct bpf_id_pair *map = idmap->map;
322 unsigned int i;
323
324 /* either both IDs should be set or both should be zero */
325 if (!!old_id != !!cur_id)
326 return false;
327
328 if (old_id == 0) /* cur_id == 0 as well */
329 return true;
330
331 for (i = 0; i < idmap->cnt; i++) {
332 if (map[i].old == old_id)
333 return map[i].cur == cur_id;
334 if (map[i].cur == cur_id)
335 return false;
336 }
337
338 /* Reached the end of known mappings; haven't seen this id before */
339 if (idmap->cnt < BPF_ID_MAP_SIZE) {
340 map[idmap->cnt].old = old_id;
341 map[idmap->cnt].cur = cur_id;
342 idmap->cnt++;
343 return true;
344 }
345
346 /*
347 * idmap slots are bounded by the number of registers and stack slots.
348 * Since referenced dynptrs acquire intermediate references that do
349 * not live in either, so the map can be exhausted. Since it is unlikely,
350 * fail the verification by treating the states as not equivalent.
351 */
352 return false;
353 }
354
355 /*
356 * Compare scalar register IDs for state equivalence.
357 *
358 * When old_id == 0, the old register is independent - not linked to any
359 * other register. Any linking in the current state only adds constraints,
360 * making it more restrictive. Since the old state didn't rely on any ID
361 * relationships for this register, it's always safe to accept cur regardless
362 * of its ID. Hence, return true immediately.
363 *
364 * When old_id != 0 but cur_id == 0, we need to ensure that different
365 * independent registers in cur don't incorrectly satisfy the ID matching
366 * requirements of linked registers in old.
367 *
368 * Example: if old has r6.id=X and r7.id=X (linked), but cur has r6.id=0
369 * and r7.id=0 (both independent), without temp IDs both would map old_id=X
370 * to cur_id=0 and pass. With temp IDs: r6 maps X->temp1, r7 tries to map
371 * X->temp2, but X is already mapped to temp1, so the check fails correctly.
372 *
373 * When old_id has BPF_ADD_CONST set, the compound id (base | flag) and the
374 * base id (flag stripped) must both map consistently. Example: old has
375 * r2.id=A, r3.id=A|flag (r3 = r2 + delta), cur has r2.id=B, r3.id=C|flag
376 * (r3 derived from unrelated r4). Without the base check, idmap gets two
377 * independent entries A->B and A|flag->C|flag, missing that A->C conflicts
378 * with A->B. The base ID cross-check catches this.
379 */
check_scalar_ids(u32 old_id,u32 cur_id,struct bpf_idmap * idmap)380 static bool check_scalar_ids(u32 old_id, u32 cur_id, struct bpf_idmap *idmap)
381 {
382 if (!old_id)
383 return true;
384
385 cur_id = cur_id ? cur_id : ++idmap->tmp_id_gen;
386
387 if (!check_ids(old_id, cur_id, idmap))
388 return false;
389 if (old_id & BPF_ADD_CONST) {
390 old_id &= ~BPF_ADD_CONST;
391 cur_id &= ~BPF_ADD_CONST;
392 if (!check_ids(old_id, cur_id, idmap))
393 return false;
394 }
395 return true;
396 }
397
__clean_func_state(struct bpf_verifier_env * env,struct bpf_func_state * st,u16 live_regs,int frame)398 static void __clean_func_state(struct bpf_verifier_env *env,
399 struct bpf_func_state *st,
400 u16 live_regs, int frame)
401 {
402 int i, j;
403
404 for (i = 0; i < BPF_REG_FP; i++) {
405 /* liveness must not touch this register anymore */
406 if (!(live_regs & BIT(i)))
407 /* since the register is unused, clear its state
408 * to make further comparison simpler
409 */
410 bpf_mark_reg_not_init(env, &st->regs[i]);
411 }
412
413 /*
414 * Clean dead 4-byte halves within each SPI independently.
415 * half_spi 2*i → lower half: slot_type[0..3] (closer to FP)
416 * half_spi 2*i+1 → upper half: slot_type[4..7] (farther from FP)
417 */
418 for (i = 0; i < st->allocated_stack / BPF_REG_SIZE; i++) {
419 bool lo_live = bpf_stack_slot_alive(env, frame, i * 2);
420 bool hi_live = bpf_stack_slot_alive(env, frame, i * 2 + 1);
421
422 if (!hi_live || !lo_live) {
423 int start = !lo_live ? 0 : BPF_REG_SIZE / 2;
424 int end = !hi_live ? BPF_REG_SIZE : BPF_REG_SIZE / 2;
425 u8 stype = st->stack[i].slot_type[7];
426
427 /*
428 * Don't clear special slots.
429 * destroy_if_dynptr_stack_slot() needs STACK_DYNPTR to
430 * detect overwrites and invalidate associated data slices.
431 * is_iter_reg_valid_uninit() and is_irq_flag_reg_valid_uninit()
432 * check for their respective slot types to detect double-create.
433 */
434 if (stype == STACK_DYNPTR || stype == STACK_ITER ||
435 stype == STACK_IRQ_FLAG)
436 continue;
437
438 /*
439 * Only scalar spills can be degraded to raw stack bytes
440 * when their high half is dead. Pointer spills need the
441 * saved spilled_ptr metadata so partial fills keep
442 * rejecting as non-scalar register fills.
443 */
444 if (!hi_live) {
445 struct bpf_reg_state *spill = &st->stack[i].spilled_ptr;
446
447 if (lo_live && stype == STACK_SPILL) {
448 u8 val = STACK_MISC;
449
450 if (spill->type != SCALAR_VALUE)
451 continue;
452
453 /*
454 * 8 byte spill of scalar 0 where half slot is dead
455 * should become STACK_ZERO in lo 4 bytes.
456 */
457 if (bpf_register_is_null(spill))
458 val = STACK_ZERO;
459 for (j = 0; j < 4; j++) {
460 u8 *t = &st->stack[i].slot_type[j];
461
462 if (*t == STACK_SPILL)
463 *t = val;
464 }
465 }
466 bpf_mark_reg_not_init(env, spill);
467 }
468 for (j = start; j < end; j++)
469 st->stack[i].slot_type[j] = STACK_POISON;
470 }
471 }
472 }
473
clean_verifier_state(struct bpf_verifier_env * env,struct bpf_verifier_state * st)474 static int clean_verifier_state(struct bpf_verifier_env *env,
475 struct bpf_verifier_state *st)
476 {
477 int i, err;
478
479 err = bpf_live_stack_query_init(env, st);
480 if (err)
481 return err;
482 for (i = 0; i <= st->curframe; i++) {
483 u32 ip = bpf_frame_insn_idx(st, i);
484 u16 live_regs = env->insn_aux_data[ip].live_regs_before;
485
486 __clean_func_state(env, st->frame[i], live_regs, i);
487 }
488 return 0;
489 }
490
regs_exact(const struct bpf_reg_state * rold,const struct bpf_reg_state * rcur,struct bpf_idmap * idmap)491 static bool regs_exact(const struct bpf_reg_state *rold,
492 const struct bpf_reg_state *rcur,
493 struct bpf_idmap *idmap)
494 {
495 return memcmp(rold, rcur, offsetof(struct bpf_reg_state, id)) == 0 &&
496 check_ids(rold->id, rcur->id, idmap) &&
497 check_ids(rold->parent_id, rcur->parent_id, idmap);
498 }
499
500 enum exact_level {
501 NOT_EXACT,
502 EXACT,
503 RANGE_WITHIN
504 };
505
506 /* Returns true if (rold safe implies rcur safe) */
regsafe(struct bpf_verifier_env * env,struct bpf_reg_state * rold,struct bpf_reg_state * rcur,struct bpf_idmap * idmap,enum exact_level exact)507 static bool regsafe(struct bpf_verifier_env *env, struct bpf_reg_state *rold,
508 struct bpf_reg_state *rcur, struct bpf_idmap *idmap,
509 enum exact_level exact)
510 {
511 if (exact == EXACT)
512 return regs_exact(rold, rcur, idmap);
513
514 if (rold->type == NOT_INIT)
515 /* explored state can't have used this */
516 return true;
517
518 /* Enforce that register types have to match exactly, including their
519 * modifiers (like PTR_MAYBE_NULL, MEM_RDONLY, etc), as a general
520 * rule.
521 *
522 * One can make a point that using a pointer register as unbounded
523 * SCALAR would be technically acceptable, but this could lead to
524 * pointer leaks because scalars are allowed to leak while pointers
525 * are not. We could make this safe in special cases if root is
526 * calling us, but it's probably not worth the hassle.
527 *
528 * Also, register types that are *not* MAYBE_NULL could technically be
529 * safe to use as their MAYBE_NULL variants (e.g., PTR_TO_MAP_VALUE
530 * is safe to be used as PTR_TO_MAP_VALUE_OR_NULL, provided both point
531 * to the same map).
532 * However, if the old MAYBE_NULL register then got NULL checked,
533 * doing so could have affected others with the same id, and we can't
534 * check for that because we lost the id when we converted to
535 * a non-MAYBE_NULL variant.
536 * So, as a general rule we don't allow mixing MAYBE_NULL and
537 * non-MAYBE_NULL registers as well.
538 */
539 if (rold->type != rcur->type)
540 return false;
541
542 switch (base_type(rold->type)) {
543 case SCALAR_VALUE:
544 if (env->explore_alu_limits) {
545 /* explore_alu_limits disables tnum_in() and range_within()
546 * logic and requires everything to be strict
547 */
548 return memcmp(rold, rcur, offsetof(struct bpf_reg_state, id)) == 0 &&
549 check_scalar_ids(rold->id, rcur->id, idmap);
550 }
551 if (!rold->precise && exact == NOT_EXACT)
552 return true;
553 /*
554 * Linked register tracking uses rold->id to detect relationships.
555 * When rold->id == 0, the register is independent and any linking
556 * in rcur only adds constraints. When rold->id != 0, we must verify
557 * id mapping and (for BPF_ADD_CONST) offset consistency.
558 *
559 * +------------------+-----------+------------------+---------------+
560 * | | rold->id | rold + ADD_CONST | rold->id == 0 |
561 * |------------------+-----------+------------------+---------------|
562 * | rcur->id | range,ids | false | range |
563 * | rcur + ADD_CONST | false | range,ids,off | range |
564 * | rcur->id == 0 | range,ids | false | range |
565 * +------------------+-----------+------------------+---------------+
566 *
567 * Why check_ids() for scalar registers?
568 *
569 * Consider the following BPF code:
570 * 1: r6 = ... unbound scalar, ID=a ...
571 * 2: r7 = ... unbound scalar, ID=b ...
572 * 3: if (r6 > r7) goto +1
573 * 4: r6 = r7
574 * 5: if (r6 > X) goto ...
575 * 6: ... memory operation using r7 ...
576 *
577 * First verification path is [1-6]:
578 * - at (4) same bpf_reg_state::id (b) would be assigned to r6 and r7;
579 * - at (5) r6 would be marked <= X, sync_linked_regs() would also mark
580 * r7 <= X, because r6 and r7 share same id.
581 * Next verification path is [1-4, 6].
582 *
583 * Instruction (6) would be reached in two states:
584 * I. r6{.id=b}, r7{.id=b} via path 1-6;
585 * II. r6{.id=a}, r7{.id=b} via path 1-4, 6.
586 *
587 * Use check_ids() to distinguish these states.
588 * ---
589 * Also verify that new value satisfies old value range knowledge.
590 */
591
592 /*
593 * ADD_CONST flags must match exactly: BPF_ADD_CONST32 and
594 * BPF_ADD_CONST64 have different linking semantics in
595 * sync_linked_regs() (alu32 zero-extends, alu64 does not),
596 * so pruning across different flag types is unsafe.
597 */
598 if (rold->id &&
599 (rold->id & BPF_ADD_CONST) != (rcur->id & BPF_ADD_CONST))
600 return false;
601
602 /* Both have offset linkage: offsets must match */
603 if ((rold->id & BPF_ADD_CONST) && rold->delta != rcur->delta)
604 return false;
605
606 if (!check_scalar_ids(rold->id, rcur->id, idmap))
607 return false;
608
609 return range_within(rold, rcur) && tnum_in(rold->var_off, rcur->var_off);
610 case PTR_TO_MAP_KEY:
611 case PTR_TO_MAP_VALUE:
612 case PTR_TO_MEM:
613 case PTR_TO_BUF:
614 case PTR_TO_TP_BUFFER:
615 /* If the new min/max/var_off satisfy the old ones and
616 * everything else matches, we are OK.
617 */
618 return memcmp(rold, rcur, offsetof(struct bpf_reg_state, var_off)) == 0 &&
619 range_within(rold, rcur) &&
620 tnum_in(rold->var_off, rcur->var_off) &&
621 check_ids(rold->id, rcur->id, idmap) &&
622 check_ids(rold->parent_id, rcur->parent_id, idmap);
623 case PTR_TO_PACKET_META:
624 case PTR_TO_PACKET:
625 /* We must have at least as much range as the old ptr
626 * did, so that any accesses which were safe before are
627 * still safe. This is true even if old range < old off,
628 * since someone could have accessed through (ptr - k), or
629 * even done ptr -= k in a register, to get a safe access.
630 */
631 if (rold->range < 0 || rcur->range < 0) {
632 /* special case for [BEYOND|AT]_PKT_END */
633 if (rold->range != rcur->range)
634 return false;
635 } else if (rold->range > rcur->range) {
636 return false;
637 }
638 /* id relations must be preserved */
639 if (!check_ids(rold->id, rcur->id, idmap))
640 return false;
641 /* new val must satisfy old val knowledge */
642 return range_within(rold, rcur) &&
643 tnum_in(rold->var_off, rcur->var_off);
644 case PTR_TO_STACK:
645 /* two stack pointers are equal only if they're pointing to
646 * the same stack frame, since fp-8 in foo != fp-8 in bar
647 */
648 return regs_exact(rold, rcur, idmap) && rold->frameno == rcur->frameno;
649 case PTR_TO_ARENA:
650 return true;
651 case PTR_TO_INSN:
652 return memcmp(rold, rcur, offsetof(struct bpf_reg_state, var_off)) == 0 &&
653 range_within(rold, rcur) && tnum_in(rold->var_off, rcur->var_off);
654 default:
655 return regs_exact(rold, rcur, idmap);
656 }
657 }
658
659 static struct bpf_reg_state unbound_reg;
660
unbound_reg_init(void)661 static __init int unbound_reg_init(void)
662 {
663 bpf_mark_reg_unknown_imprecise(&unbound_reg);
664 return 0;
665 }
666 late_initcall(unbound_reg_init);
667
is_spilled_scalar_after(const struct bpf_stack_state * stack,int im)668 static bool is_spilled_scalar_after(const struct bpf_stack_state *stack, int im)
669 {
670 return stack->slot_type[im] == STACK_SPILL &&
671 stack->spilled_ptr.type == SCALAR_VALUE;
672 }
673
is_stack_misc_after(struct bpf_verifier_env * env,struct bpf_stack_state * stack,int im)674 static bool is_stack_misc_after(struct bpf_verifier_env *env,
675 struct bpf_stack_state *stack, int im)
676 {
677 u32 i;
678
679 for (i = im; i < ARRAY_SIZE(stack->slot_type); ++i) {
680 if ((stack->slot_type[i] == STACK_MISC) ||
681 ((stack->slot_type[i] == STACK_INVALID || stack->slot_type[i] == STACK_POISON) &&
682 env->allow_uninit_stack))
683 continue;
684 return false;
685 }
686
687 return true;
688 }
689
scalar_reg_for_stack(struct bpf_verifier_env * env,struct bpf_stack_state * stack,int im)690 static struct bpf_reg_state *scalar_reg_for_stack(struct bpf_verifier_env *env,
691 struct bpf_stack_state *stack, int im)
692 {
693 if (is_spilled_scalar_after(stack, im))
694 return &stack->spilled_ptr;
695
696 if (is_stack_misc_after(env, stack, im))
697 return &unbound_reg;
698
699 return NULL;
700 }
701
stacksafe(struct bpf_verifier_env * env,struct bpf_func_state * old,struct bpf_func_state * cur,struct bpf_idmap * idmap,enum exact_level exact)702 static bool stacksafe(struct bpf_verifier_env *env, struct bpf_func_state *old,
703 struct bpf_func_state *cur, struct bpf_idmap *idmap,
704 enum exact_level exact)
705 {
706 int i, spi;
707
708 /* walk slots of the explored stack and ignore any additional
709 * slots in the current stack, since explored(safe) state
710 * didn't use them
711 */
712 for (i = 0; i < old->allocated_stack; i++) {
713 struct bpf_reg_state *old_reg, *cur_reg;
714 int im = i % BPF_REG_SIZE;
715
716 spi = i / BPF_REG_SIZE;
717
718 if (exact == EXACT) {
719 u8 old_type = old->stack[spi].slot_type[i % BPF_REG_SIZE];
720 u8 cur_type = i < cur->allocated_stack ?
721 cur->stack[spi].slot_type[i % BPF_REG_SIZE] : STACK_INVALID;
722
723 /* STACK_INVALID and STACK_POISON are equivalent for pruning */
724 if (old_type == STACK_POISON)
725 old_type = STACK_INVALID;
726 if (cur_type == STACK_POISON)
727 cur_type = STACK_INVALID;
728 if (i >= cur->allocated_stack || old_type != cur_type)
729 return false;
730 }
731
732 if (old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_INVALID ||
733 old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_POISON)
734 continue;
735
736 if (env->allow_uninit_stack &&
737 old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_MISC)
738 continue;
739
740 /* explored stack has more populated slots than current stack
741 * and these slots were used
742 */
743 if (i >= cur->allocated_stack)
744 return false;
745
746 /*
747 * 64 and 32-bit scalar spills vs MISC/INVALID slots and vice versa.
748 * Load from MISC/INVALID slots produces unbound scalar.
749 * Construct a fake register for such stack and call
750 * regsafe() to ensure scalar ids are compared.
751 */
752 if (im == 0 || im == 4) {
753 old_reg = scalar_reg_for_stack(env, &old->stack[spi], im);
754 cur_reg = scalar_reg_for_stack(env, &cur->stack[spi], im);
755 if (old_reg && cur_reg) {
756 if (!regsafe(env, old_reg, cur_reg, idmap, exact))
757 return false;
758 i += (im == 0 ? BPF_REG_SIZE - 1 : 3);
759 continue;
760 }
761 }
762
763 /* if old state was safe with misc data in the stack
764 * it will be safe with zero-initialized stack.
765 * The opposite is not true
766 */
767 if (old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_MISC &&
768 cur->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_ZERO)
769 continue;
770 if (old->stack[spi].slot_type[i % BPF_REG_SIZE] !=
771 cur->stack[spi].slot_type[i % BPF_REG_SIZE])
772 /* Ex: old explored (safe) state has STACK_SPILL in
773 * this stack slot, but current has STACK_MISC ->
774 * this verifier states are not equivalent,
775 * return false to continue verification of this path
776 */
777 return false;
778 if (i % BPF_REG_SIZE != BPF_REG_SIZE - 1)
779 continue;
780 /* Both old and cur are having same slot_type */
781 switch (old->stack[spi].slot_type[BPF_REG_SIZE - 1]) {
782 case STACK_SPILL:
783 /* when explored and current stack slot are both storing
784 * spilled registers, check that stored pointers types
785 * are the same as well.
786 * Ex: explored safe path could have stored
787 * (bpf_reg_state) {.type = PTR_TO_STACK, .off = -8}
788 * but current path has stored:
789 * (bpf_reg_state) {.type = PTR_TO_STACK, .off = -16}
790 * such verifier states are not equivalent.
791 * return false to continue verification of this path
792 */
793 if (!regsafe(env, &old->stack[spi].spilled_ptr,
794 &cur->stack[spi].spilled_ptr, idmap, exact))
795 return false;
796 break;
797 case STACK_DYNPTR:
798 old_reg = &old->stack[spi].spilled_ptr;
799 cur_reg = &cur->stack[spi].spilled_ptr;
800 if (old_reg->dynptr.type != cur_reg->dynptr.type ||
801 old_reg->dynptr.first_slot != cur_reg->dynptr.first_slot ||
802 !check_ids(old_reg->id, cur_reg->id, idmap) ||
803 !check_ids(old_reg->parent_id, cur_reg->parent_id, idmap))
804 return false;
805 break;
806 case STACK_ITER:
807 old_reg = &old->stack[spi].spilled_ptr;
808 cur_reg = &cur->stack[spi].spilled_ptr;
809 /* iter.depth is not compared between states as it
810 * doesn't matter for correctness and would otherwise
811 * prevent convergence; we maintain it only to prevent
812 * infinite loop check triggering, see
813 * iter_active_depths_differ()
814 */
815 if (old_reg->type != cur_reg->type ||
816 old_reg->iter.btf != cur_reg->iter.btf ||
817 old_reg->iter.btf_id != cur_reg->iter.btf_id ||
818 old_reg->iter.state != cur_reg->iter.state ||
819 /* ignore {old_reg,cur_reg}->iter.depth, see above */
820 !check_ids(old_reg->id, cur_reg->id, idmap))
821 return false;
822 break;
823 case STACK_IRQ_FLAG:
824 old_reg = &old->stack[spi].spilled_ptr;
825 cur_reg = &cur->stack[spi].spilled_ptr;
826 if (!check_ids(old_reg->id, cur_reg->id, idmap) ||
827 old_reg->irq.kfunc_class != cur_reg->irq.kfunc_class)
828 return false;
829 break;
830 case STACK_MISC:
831 case STACK_ZERO:
832 case STACK_INVALID:
833 case STACK_POISON:
834 continue;
835 /* Ensure that new unhandled slot types return false by default */
836 default:
837 return false;
838 }
839 }
840 return true;
841 }
842
843 /*
844 * Compare stack arg slots between old and current states.
845 * Outgoing stack args are path-local state and must agree for pruning.
846 */
stack_arg_safe(struct bpf_verifier_env * env,struct bpf_func_state * old,struct bpf_func_state * cur,struct bpf_idmap * idmap,enum exact_level exact)847 static bool stack_arg_safe(struct bpf_verifier_env *env, struct bpf_func_state *old,
848 struct bpf_func_state *cur, struct bpf_idmap *idmap,
849 enum exact_level exact)
850 {
851 int i, nslots;
852
853 nslots = max(old->out_stack_arg_cnt, cur->out_stack_arg_cnt);
854 for (i = 0; i < nslots; i++) {
855 struct bpf_reg_state *old_arg, *cur_arg;
856 struct bpf_reg_state not_init = { .type = NOT_INIT };
857
858 old_arg = i < old->out_stack_arg_cnt ?
859 &old->stack_arg_regs[i] : ¬_init;
860 cur_arg = i < cur->out_stack_arg_cnt ?
861 &cur->stack_arg_regs[i] : ¬_init;
862 if (!regsafe(env, old_arg, cur_arg, idmap, exact))
863 return false;
864 }
865
866 return true;
867 }
868
refsafe(struct bpf_verifier_state * old,struct bpf_verifier_state * cur,struct bpf_idmap * idmap)869 static bool refsafe(struct bpf_verifier_state *old, struct bpf_verifier_state *cur,
870 struct bpf_idmap *idmap)
871 {
872 int i;
873
874 if (old->acquired_refs != cur->acquired_refs)
875 return false;
876
877 if (old->active_locks != cur->active_locks)
878 return false;
879
880 if (old->active_preempt_locks != cur->active_preempt_locks)
881 return false;
882
883 if (old->active_rcu_locks != cur->active_rcu_locks)
884 return false;
885
886 if (!check_ids(old->active_irq_id, cur->active_irq_id, idmap))
887 return false;
888
889 if (!check_ids(old->active_lock_id, cur->active_lock_id, idmap) ||
890 old->active_lock_ptr != cur->active_lock_ptr)
891 return false;
892
893 for (i = 0; i < old->acquired_refs; i++) {
894 if (!check_ids(old->refs[i].id, cur->refs[i].id, idmap) ||
895 old->refs[i].type != cur->refs[i].type)
896 return false;
897 switch (old->refs[i].type) {
898 case REF_TYPE_PTR:
899 if (!check_ids(old->refs[i].parent_id, cur->refs[i].parent_id, idmap))
900 return false;
901 break;
902 case REF_TYPE_IRQ:
903 break;
904 case REF_TYPE_LOCK:
905 case REF_TYPE_RES_LOCK:
906 case REF_TYPE_RES_LOCK_IRQ:
907 if (old->refs[i].ptr != cur->refs[i].ptr)
908 return false;
909 break;
910 default:
911 WARN_ONCE(1, "Unhandled enum type for reference state: %d\n", old->refs[i].type);
912 return false;
913 }
914 }
915
916 return true;
917 }
918
919 /* compare two verifier states
920 *
921 * all states stored in state_list are known to be valid, since
922 * verifier reached 'bpf_exit' instruction through them
923 *
924 * this function is called when verifier exploring different branches of
925 * execution popped from the state stack. If it sees an old state that has
926 * more strict register state and more strict stack state then this execution
927 * branch doesn't need to be explored further, since verifier already
928 * concluded that more strict state leads to valid finish.
929 *
930 * Therefore two states are equivalent if register state is more conservative
931 * and explored stack state is more conservative than the current one.
932 * Example:
933 * explored current
934 * (slot1=INV slot2=MISC) == (slot1=MISC slot2=MISC)
935 * (slot1=MISC slot2=MISC) != (slot1=INV slot2=MISC)
936 *
937 * In other words if current stack state (one being explored) has more
938 * valid slots than old one that already passed validation, it means
939 * the verifier can stop exploring and conclude that current state is valid too
940 *
941 * Similarly with registers. If explored state has register type as invalid
942 * whereas register type in current state is meaningful, it means that
943 * the current state will reach 'bpf_exit' instruction safely
944 */
func_states_equal(struct bpf_verifier_env * env,struct bpf_func_state * old,struct bpf_func_state * cur,u32 insn_idx,enum exact_level exact)945 static bool func_states_equal(struct bpf_verifier_env *env, struct bpf_func_state *old,
946 struct bpf_func_state *cur, u32 insn_idx, enum exact_level exact)
947 {
948 u16 live_regs = env->insn_aux_data[insn_idx].live_regs_before;
949 u16 i;
950
951 if (old->callback_depth > cur->callback_depth)
952 return false;
953
954 if (!old->no_stack_arg_load && cur->no_stack_arg_load)
955 return false;
956
957 for (i = 0; i < MAX_BPF_REG; i++)
958 if (((1 << i) & live_regs) &&
959 !regsafe(env, &old->regs[i], &cur->regs[i],
960 &env->idmap_scratch, exact))
961 return false;
962
963 if (!stacksafe(env, old, cur, &env->idmap_scratch, exact))
964 return false;
965
966 if (!stack_arg_safe(env, old, cur, &env->idmap_scratch, exact))
967 return false;
968
969 return true;
970 }
971
reset_idmap_scratch(struct bpf_verifier_env * env)972 static void reset_idmap_scratch(struct bpf_verifier_env *env)
973 {
974 struct bpf_idmap *idmap = &env->idmap_scratch;
975
976 idmap->tmp_id_gen = env->id_gen;
977 idmap->cnt = 0;
978 }
979
states_equal(struct bpf_verifier_env * env,struct bpf_verifier_state * old,struct bpf_verifier_state * cur,enum exact_level exact)980 static bool states_equal(struct bpf_verifier_env *env,
981 struct bpf_verifier_state *old,
982 struct bpf_verifier_state *cur,
983 enum exact_level exact)
984 {
985 u32 insn_idx;
986 int i;
987
988 if (old->curframe != cur->curframe)
989 return false;
990
991 reset_idmap_scratch(env);
992
993 /* Verification state from speculative execution simulation
994 * must never prune a non-speculative execution one.
995 */
996 if (old->speculative && !cur->speculative)
997 return false;
998
999 if (old->in_sleepable != cur->in_sleepable)
1000 return false;
1001
1002 if (!refsafe(old, cur, &env->idmap_scratch))
1003 return false;
1004
1005 /* for states to be equal callsites have to be the same
1006 * and all frame states need to be equivalent
1007 */
1008 for (i = 0; i <= old->curframe; i++) {
1009 insn_idx = bpf_frame_insn_idx(old, i);
1010 if (old->frame[i]->callsite != cur->frame[i]->callsite)
1011 return false;
1012 if (!func_states_equal(env, old->frame[i], cur->frame[i], insn_idx, exact))
1013 return false;
1014 }
1015 return true;
1016 }
1017
1018 /* find precise scalars in the previous equivalent state and
1019 * propagate them into the current state
1020 */
propagate_precision(struct bpf_verifier_env * env,const struct bpf_verifier_state * old,struct bpf_verifier_state * cur,bool * changed)1021 static int propagate_precision(struct bpf_verifier_env *env,
1022 const struct bpf_verifier_state *old,
1023 struct bpf_verifier_state *cur,
1024 bool *changed)
1025 {
1026 struct bpf_reg_state *state_reg;
1027 struct bpf_func_state *state;
1028 int i, err = 0, fr;
1029 bool first;
1030
1031 for (fr = old->curframe; fr >= 0; fr--) {
1032 state = old->frame[fr];
1033 state_reg = state->regs;
1034 first = true;
1035 for (i = 0; i < BPF_REG_FP; i++, state_reg++) {
1036 if (state_reg->type != SCALAR_VALUE ||
1037 !state_reg->precise)
1038 continue;
1039 if (env->log.level & BPF_LOG_LEVEL2) {
1040 if (first)
1041 verbose(env, "frame %d: propagating r%d", fr, i);
1042 else
1043 verbose(env, ",r%d", i);
1044 }
1045 bpf_bt_set_frame_reg(&env->bt, fr, i);
1046 first = false;
1047 }
1048
1049 for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
1050 if (!bpf_is_spilled_reg(&state->stack[i]))
1051 continue;
1052 state_reg = &state->stack[i].spilled_ptr;
1053 if (state_reg->type != SCALAR_VALUE ||
1054 !state_reg->precise)
1055 continue;
1056 if (env->log.level & BPF_LOG_LEVEL2) {
1057 if (first)
1058 verbose(env, "frame %d: propagating fp%d",
1059 fr, (-i - 1) * BPF_REG_SIZE);
1060 else
1061 verbose(env, ",fp%d", (-i - 1) * BPF_REG_SIZE);
1062 }
1063 bpf_bt_set_frame_slot(&env->bt, fr, i);
1064 first = false;
1065 }
1066 if (!first && (env->log.level & BPF_LOG_LEVEL2))
1067 verbose(env, "\n");
1068 }
1069
1070 err = bpf_mark_chain_precision(env, cur, -1, changed);
1071 if (err < 0)
1072 return err;
1073
1074 return 0;
1075 }
1076
1077 #define MAX_BACKEDGE_ITERS 64
1078
1079 /* Propagate read and precision marks from visit->backedges[*].state->equal_state
1080 * to corresponding parent states of visit->backedges[*].state until fixed point is reached,
1081 * then free visit->backedges.
1082 * After execution of this function incomplete_read_marks() will return false
1083 * for all states corresponding to @visit->callchain.
1084 */
propagate_backedges(struct bpf_verifier_env * env,struct bpf_scc_visit * visit)1085 static int propagate_backedges(struct bpf_verifier_env *env, struct bpf_scc_visit *visit)
1086 {
1087 struct bpf_scc_backedge *backedge;
1088 struct bpf_verifier_state *st;
1089 bool changed;
1090 int i, err;
1091
1092 i = 0;
1093 do {
1094 if (i++ > MAX_BACKEDGE_ITERS) {
1095 if (env->log.level & BPF_LOG_LEVEL2)
1096 verbose(env, "%s: too many iterations\n", __func__);
1097 for (backedge = visit->backedges; backedge; backedge = backedge->next)
1098 bpf_mark_all_scalars_precise(env, &backedge->state);
1099 break;
1100 }
1101 changed = false;
1102 for (backedge = visit->backedges; backedge; backedge = backedge->next) {
1103 st = &backedge->state;
1104 err = propagate_precision(env, st->equal_state, st, &changed);
1105 if (err)
1106 return err;
1107 }
1108 } while (changed);
1109
1110 bpf_free_backedges(visit);
1111 return 0;
1112 }
1113
states_maybe_looping(struct bpf_verifier_state * old,struct bpf_verifier_state * cur)1114 static bool states_maybe_looping(struct bpf_verifier_state *old,
1115 struct bpf_verifier_state *cur)
1116 {
1117 struct bpf_func_state *fold, *fcur;
1118 int i, fr = cur->curframe;
1119
1120 if (old->curframe != fr)
1121 return false;
1122
1123 fold = old->frame[fr];
1124 fcur = cur->frame[fr];
1125 for (i = 0; i < MAX_BPF_REG; i++)
1126 if (memcmp(&fold->regs[i], &fcur->regs[i],
1127 offsetof(struct bpf_reg_state, frameno)))
1128 return false;
1129 return true;
1130 }
1131
1132 /* is_state_visited() handles iter_next() (see process_iter_next_call() for
1133 * terminology) calls specially: as opposed to bounded BPF loops, it *expects*
1134 * states to match, which otherwise would look like an infinite loop. So while
1135 * iter_next() calls are taken care of, we still need to be careful and
1136 * prevent erroneous and too eager declaration of "infinite loop", when
1137 * iterators are involved.
1138 *
1139 * Here's a situation in pseudo-BPF assembly form:
1140 *
1141 * 0: again: ; set up iter_next() call args
1142 * 1: r1 = &it ; <CHECKPOINT HERE>
1143 * 2: call bpf_iter_num_next ; this is iter_next() call
1144 * 3: if r0 == 0 goto done
1145 * 4: ... something useful here ...
1146 * 5: goto again ; another iteration
1147 * 6: done:
1148 * 7: r1 = &it
1149 * 8: call bpf_iter_num_destroy ; clean up iter state
1150 * 9: exit
1151 *
1152 * This is a typical loop. Let's assume that we have a prune point at 1:,
1153 * before we get to `call bpf_iter_num_next` (e.g., because of that `goto
1154 * again`, assuming other heuristics don't get in a way).
1155 *
1156 * When we first time come to 1:, let's say we have some state X. We proceed
1157 * to 2:, fork states, enqueue ACTIVE, validate NULL case successfully, exit.
1158 * Now we come back to validate that forked ACTIVE state. We proceed through
1159 * 3-5, come to goto, jump to 1:. Let's assume our state didn't change, so we
1160 * are converging. But the problem is that we don't know that yet, as this
1161 * convergence has to happen at iter_next() call site only. So if nothing is
1162 * done, at 1: verifier will use bounded loop logic and declare infinite
1163 * looping (and would be *technically* correct, if not for iterator's
1164 * "eventual sticky NULL" contract, see process_iter_next_call()). But we
1165 * don't want that. So what we do in process_iter_next_call() when we go on
1166 * another ACTIVE iteration, we bump slot->iter.depth, to mark that it's
1167 * a different iteration. So when we suspect an infinite loop, we additionally
1168 * check if any of the *ACTIVE* iterator states depths differ. If yes, we
1169 * pretend we are not looping and wait for next iter_next() call.
1170 *
1171 * This only applies to ACTIVE state. In DRAINED state we don't expect to
1172 * loop, because that would actually mean infinite loop, as DRAINED state is
1173 * "sticky", and so we'll keep returning into the same instruction with the
1174 * same state (at least in one of possible code paths).
1175 *
1176 * This approach allows to keep infinite loop heuristic even in the face of
1177 * active iterator. E.g., C snippet below is and will be detected as
1178 * infinitely looping:
1179 *
1180 * struct bpf_iter_num it;
1181 * int *p, x;
1182 *
1183 * bpf_iter_num_new(&it, 0, 10);
1184 * while ((p = bpf_iter_num_next(&t))) {
1185 * x = p;
1186 * while (x--) {} // <<-- infinite loop here
1187 * }
1188 *
1189 */
iter_active_depths_differ(struct bpf_verifier_state * old,struct bpf_verifier_state * cur)1190 static bool iter_active_depths_differ(struct bpf_verifier_state *old, struct bpf_verifier_state *cur)
1191 {
1192 struct bpf_reg_state *slot, *cur_slot;
1193 struct bpf_func_state *state;
1194 int i, fr;
1195
1196 for (fr = old->curframe; fr >= 0; fr--) {
1197 state = old->frame[fr];
1198 for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
1199 if (state->stack[i].slot_type[0] != STACK_ITER)
1200 continue;
1201
1202 slot = &state->stack[i].spilled_ptr;
1203 if (slot->iter.state != BPF_ITER_STATE_ACTIVE)
1204 continue;
1205
1206 cur_slot = &cur->frame[fr]->stack[i].spilled_ptr;
1207 if (cur_slot->iter.depth != slot->iter.depth)
1208 return true;
1209 }
1210 }
1211 return false;
1212 }
1213
mark_all_scalars_imprecise(struct bpf_verifier_env * env,struct bpf_verifier_state * st)1214 static void mark_all_scalars_imprecise(struct bpf_verifier_env *env, struct bpf_verifier_state *st)
1215 {
1216 struct bpf_func_state *func;
1217 struct bpf_reg_state *reg;
1218 int i, j;
1219
1220 for (i = 0; i <= st->curframe; i++) {
1221 func = st->frame[i];
1222 for (j = 0; j < BPF_REG_FP; j++) {
1223 reg = &func->regs[j];
1224 if (reg->type != SCALAR_VALUE)
1225 continue;
1226 reg->precise = false;
1227 }
1228 for (j = 0; j < func->allocated_stack / BPF_REG_SIZE; j++) {
1229 if (!bpf_is_spilled_reg(&func->stack[j]))
1230 continue;
1231 reg = &func->stack[j].spilled_ptr;
1232 if (reg->type != SCALAR_VALUE)
1233 continue;
1234 reg->precise = false;
1235 }
1236 }
1237 }
1238
bpf_is_state_visited(struct bpf_verifier_env * env,int insn_idx)1239 int bpf_is_state_visited(struct bpf_verifier_env *env, int insn_idx)
1240 {
1241 struct bpf_verifier_state_list *new_sl;
1242 struct bpf_verifier_state_list *sl;
1243 struct bpf_verifier_state *cur = env->cur_state, *new;
1244 bool force_new_state, add_new_state, loop;
1245 int n, err, states_cnt = 0;
1246 struct list_head *pos, *tmp, *head;
1247
1248 force_new_state = env->test_state_freq || bpf_is_force_checkpoint(env, insn_idx) ||
1249 /* Avoid accumulating infinitely long jmp history */
1250 cur->jmp_history_cnt > 40;
1251
1252 /* bpf progs typically have pruning point every 4 instructions
1253 * http://vger.kernel.org/bpfconf2019.html#session-1
1254 * Do not add new state for future pruning if the verifier hasn't seen
1255 * at least 2 jumps and at least 8 instructions.
1256 * This heuristics helps decrease 'total_states' and 'peak_states' metric.
1257 * In tests that amounts to up to 50% reduction into total verifier
1258 * memory consumption and 20% verifier time speedup.
1259 */
1260 add_new_state = force_new_state;
1261 if (env->jmps_processed - env->prev_jmps_processed >= 2 &&
1262 env->insn_processed - env->prev_insn_processed >= 8)
1263 add_new_state = true;
1264
1265 /* keep cleaning the current state as registers/stack become dead */
1266 err = clean_verifier_state(env, cur);
1267 if (err)
1268 return err;
1269
1270 loop = false;
1271 head = bpf_explored_state(env, insn_idx);
1272 list_for_each_safe(pos, tmp, head) {
1273 sl = container_of(pos, struct bpf_verifier_state_list, node);
1274 states_cnt++;
1275 if (sl->state.insn_idx != insn_idx)
1276 continue;
1277
1278 if (sl->state.branches) {
1279 struct bpf_func_state *frame = sl->state.frame[sl->state.curframe];
1280
1281 if (frame->in_async_callback_fn &&
1282 frame->async_entry_cnt != cur->frame[cur->curframe]->async_entry_cnt) {
1283 /* Different async_entry_cnt means that the verifier is
1284 * processing another entry into async callback.
1285 * Seeing the same state is not an indication of infinite
1286 * loop or infinite recursion.
1287 * But finding the same state doesn't mean that it's safe
1288 * to stop processing the current state. The previous state
1289 * hasn't yet reached bpf_exit, since state.branches > 0.
1290 * Checking in_async_callback_fn alone is not enough either.
1291 * Since the verifier still needs to catch infinite loops
1292 * inside async callbacks.
1293 */
1294 goto skip_inf_loop_check;
1295 }
1296 /* BPF open-coded iterators loop detection is special.
1297 * states_maybe_looping() logic is too simplistic in detecting
1298 * states that *might* be equivalent, because it doesn't know
1299 * about ID remapping, so don't even perform it.
1300 * See process_iter_next_call() and iter_active_depths_differ()
1301 * for overview of the logic. When current and one of parent
1302 * states are detected as equivalent, it's a good thing: we prove
1303 * convergence and can stop simulating further iterations.
1304 * It's safe to assume that iterator loop will finish, taking into
1305 * account iter_next() contract of eventually returning
1306 * sticky NULL result.
1307 *
1308 * Note, that states have to be compared exactly in this case because
1309 * read and precision marks might not be finalized inside the loop.
1310 * E.g. as in the program below:
1311 *
1312 * 1. r7 = -16
1313 * 2. r6 = bpf_get_prandom_u32()
1314 * 3. while (bpf_iter_num_next(&fp[-8])) {
1315 * 4. if (r6 != 42) {
1316 * 5. r7 = -32
1317 * 6. r6 = bpf_get_prandom_u32()
1318 * 7. continue
1319 * 8. }
1320 * 9. r0 = r10
1321 * 10. r0 += r7
1322 * 11. r8 = *(u64 *)(r0 + 0)
1323 * 12. r6 = bpf_get_prandom_u32()
1324 * 13. }
1325 *
1326 * Here verifier would first visit path 1-3, create a checkpoint at 3
1327 * with r7=-16, continue to 4-7,3. Existing checkpoint at 3 does
1328 * not have read or precision mark for r7 yet, thus inexact states
1329 * comparison would discard current state with r7=-32
1330 * => unsafe memory access at 11 would not be caught.
1331 */
1332 if (is_iter_next_insn(env, insn_idx)) {
1333 if (states_equal(env, &sl->state, cur, RANGE_WITHIN)) {
1334 struct bpf_func_state *cur_frame;
1335 struct bpf_reg_state *iter_state, *iter_reg;
1336 int spi;
1337
1338 cur_frame = cur->frame[cur->curframe];
1339 /* btf_check_iter_kfuncs() enforces that
1340 * iter state pointer is always the first arg
1341 */
1342 iter_reg = &cur_frame->regs[BPF_REG_1];
1343 /* current state is valid due to states_equal(),
1344 * so we can assume valid iter and reg state,
1345 * no need for extra (re-)validations
1346 */
1347 spi = bpf_get_spi(iter_reg->var_off.value);
1348 iter_state = &bpf_func(env, iter_reg)->stack[spi].spilled_ptr;
1349 if (iter_state->iter.state == BPF_ITER_STATE_ACTIVE) {
1350 loop = true;
1351 goto hit;
1352 }
1353 }
1354 goto skip_inf_loop_check;
1355 }
1356 if (is_may_goto_insn_at(env, insn_idx)) {
1357 if (sl->state.may_goto_depth != cur->may_goto_depth &&
1358 states_equal(env, &sl->state, cur, RANGE_WITHIN)) {
1359 loop = true;
1360 goto hit;
1361 }
1362 }
1363 if (bpf_calls_callback(env, insn_idx)) {
1364 if (states_equal(env, &sl->state, cur, RANGE_WITHIN)) {
1365 loop = true;
1366 goto hit;
1367 }
1368 goto skip_inf_loop_check;
1369 }
1370 /* attempt to detect infinite loop to avoid unnecessary doomed work */
1371 if (states_maybe_looping(&sl->state, cur) &&
1372 states_equal(env, &sl->state, cur, EXACT) &&
1373 !iter_active_depths_differ(&sl->state, cur) &&
1374 sl->state.may_goto_depth == cur->may_goto_depth &&
1375 sl->state.callback_unroll_depth == cur->callback_unroll_depth) {
1376 verbose_linfo(env, insn_idx, "; ");
1377 verbose(env, "infinite loop detected at insn %d\n", insn_idx);
1378 verbose(env, "cur state:");
1379 print_verifier_state(env, cur, cur->curframe, true);
1380 verbose(env, "old state:");
1381 print_verifier_state(env, &sl->state, cur->curframe, true);
1382 return -EINVAL;
1383 }
1384 /* if the verifier is processing a loop, avoid adding new state
1385 * too often, since different loop iterations have distinct
1386 * states and may not help future pruning.
1387 * This threshold shouldn't be too low to make sure that
1388 * a loop with large bound will be rejected quickly.
1389 * The most abusive loop will be:
1390 * r1 += 1
1391 * if r1 < 1000000 goto pc-2
1392 * 1M insn_procssed limit / 100 == 10k peak states.
1393 * This threshold shouldn't be too high either, since states
1394 * at the end of the loop are likely to be useful in pruning.
1395 */
1396 skip_inf_loop_check:
1397 if (!force_new_state &&
1398 env->jmps_processed - env->prev_jmps_processed < 20 &&
1399 env->insn_processed - env->prev_insn_processed < 100)
1400 add_new_state = false;
1401 goto miss;
1402 }
1403 /* See comments for mark_all_regs_read_and_precise() */
1404 loop = incomplete_read_marks(env, &sl->state);
1405 if (states_equal(env, &sl->state, cur, loop ? RANGE_WITHIN : NOT_EXACT)) {
1406 hit:
1407 sl->hit_cnt++;
1408
1409 /* if previous state reached the exit with precision and
1410 * current state is equivalent to it (except precision marks)
1411 * the precision needs to be propagated back in
1412 * the current state.
1413 */
1414 err = 0;
1415 if (bpf_is_jmp_point(env, env->insn_idx))
1416 err = bpf_push_jmp_history(env, cur, 0, 0, 0, 0);
1417 err = err ? : propagate_precision(env, &sl->state, cur, NULL);
1418 if (err)
1419 return err;
1420 /* When processing iterator based loops above propagate_liveness and
1421 * propagate_precision calls are not sufficient to transfer all relevant
1422 * read and precision marks. E.g. consider the following case:
1423 *
1424 * .-> A --. Assume the states are visited in the order A, B, C.
1425 * | | | Assume that state B reaches a state equivalent to state A.
1426 * | v v At this point, state C is not processed yet, so state A
1427 * '-- B C has not received any read or precision marks from C.
1428 * Thus, marks propagated from A to B are incomplete.
1429 *
1430 * The verifier mitigates this by performing the following steps:
1431 *
1432 * - Prior to the main verification pass, strongly connected components
1433 * (SCCs) are computed over the program's control flow graph,
1434 * intraprocedurally.
1435 *
1436 * - During the main verification pass, `maybe_enter_scc()` checks
1437 * whether the current verifier state is entering an SCC. If so, an
1438 * instance of a `bpf_scc_visit` object is created, and the state
1439 * entering the SCC is recorded as the entry state.
1440 *
1441 * - This instance is associated not with the SCC itself, but with a
1442 * `bpf_scc_callchain`: a tuple consisting of the call sites leading to
1443 * the SCC and the SCC id. See `compute_scc_callchain()`.
1444 *
1445 * - When a verification path encounters a `states_equal(...,
1446 * RANGE_WITHIN)` condition, there exists a call chain describing the
1447 * current state and a corresponding `bpf_scc_visit` instance. A copy
1448 * of the current state is created and added to
1449 * `bpf_scc_visit->backedges`.
1450 *
1451 * - When a verification path terminates, `maybe_exit_scc()` is called
1452 * from `bpf_update_branch_counts()`. For states with `branches == 0`, it
1453 * checks whether the state is the entry state of any `bpf_scc_visit`
1454 * instance. If it is, this indicates that all paths originating from
1455 * this SCC visit have been explored. `propagate_backedges()` is then
1456 * called, which propagates read and precision marks through the
1457 * backedges until a fixed point is reached.
1458 * (In the earlier example, this would propagate marks from A to B,
1459 * from C to A, and then again from A to B.)
1460 *
1461 * A note on callchains
1462 * --------------------
1463 *
1464 * Consider the following example:
1465 *
1466 * void foo() { loop { ... SCC#1 ... } }
1467 * void main() {
1468 * A: foo();
1469 * B: ...
1470 * C: foo();
1471 * }
1472 *
1473 * Here, there are two distinct callchains leading to SCC#1:
1474 * - (A, SCC#1)
1475 * - (C, SCC#1)
1476 *
1477 * Each callchain identifies a separate `bpf_scc_visit` instance that
1478 * accumulates backedge states. The `propagate_{liveness,precision}()`
1479 * functions traverse the parent state of each backedge state, which
1480 * means these parent states must remain valid (i.e., not freed) while
1481 * the corresponding `bpf_scc_visit` instance exists.
1482 *
1483 * Associating `bpf_scc_visit` instances directly with SCCs instead of
1484 * callchains would break this invariant:
1485 * - States explored during `C: foo()` would contribute backedges to
1486 * SCC#1, but SCC#1 would only be exited once the exploration of
1487 * `A: foo()` completes.
1488 * - By that time, the states explored between `A: foo()` and `C: foo()`
1489 * (i.e., `B: ...`) may have already been freed, causing the parent
1490 * links for states from `C: foo()` to become invalid.
1491 */
1492 if (loop) {
1493 struct bpf_scc_backedge *backedge;
1494
1495 backedge = kzalloc_obj(*backedge,
1496 GFP_KERNEL_ACCOUNT);
1497 if (!backedge)
1498 return -ENOMEM;
1499 err = bpf_copy_verifier_state(&backedge->state, cur);
1500 backedge->state.equal_state = &sl->state;
1501 backedge->state.insn_idx = insn_idx;
1502 err = err ?: add_scc_backedge(env, &sl->state, backedge);
1503 if (err) {
1504 bpf_free_verifier_state(&backedge->state, false);
1505 kfree(backedge);
1506 return err;
1507 }
1508 }
1509 return 1;
1510 }
1511 miss:
1512 /* when new state is not going to be added do not increase miss count.
1513 * Otherwise several loop iterations will remove the state
1514 * recorded earlier. The goal of these heuristics is to have
1515 * states from some iterations of the loop (some in the beginning
1516 * and some at the end) to help pruning.
1517 */
1518 if (add_new_state)
1519 sl->miss_cnt++;
1520 /* heuristic to determine whether this state is beneficial
1521 * to keep checking from state equivalence point of view.
1522 * Higher numbers increase max_states_per_insn and verification time,
1523 * but do not meaningfully decrease insn_processed.
1524 * 'n' controls how many times state could miss before eviction.
1525 * Use bigger 'n' for checkpoints because evicting checkpoint states
1526 * too early would hinder iterator convergence.
1527 */
1528 n = bpf_is_force_checkpoint(env, insn_idx) && sl->state.branches > 0 ? 64 : 3;
1529 if (sl->miss_cnt > sl->hit_cnt * n + n) {
1530 /* the state is unlikely to be useful. Remove it to
1531 * speed up verification
1532 */
1533 sl->in_free_list = true;
1534 list_del(&sl->node);
1535 list_add(&sl->node, &env->free_list);
1536 env->free_list_size++;
1537 env->explored_states_size--;
1538 maybe_free_verifier_state(env, sl);
1539 }
1540 }
1541
1542 if (env->max_states_per_insn < states_cnt)
1543 env->max_states_per_insn = states_cnt;
1544
1545 if (!env->bpf_capable && states_cnt > BPF_COMPLEXITY_LIMIT_STATES)
1546 return 0;
1547
1548 if (!add_new_state)
1549 return 0;
1550
1551 /* There were no equivalent states, remember the current one.
1552 * Technically the current state is not proven to be safe yet,
1553 * but it will either reach outer most bpf_exit (which means it's safe)
1554 * or it will be rejected. When there are no loops the verifier won't be
1555 * seeing this tuple (frame[0].callsite, frame[1].callsite, .. insn_idx)
1556 * again on the way to bpf_exit.
1557 * When looping the sl->state.branches will be > 0 and this state
1558 * will not be considered for equivalence until branches == 0.
1559 */
1560 new_sl = kzalloc_obj(struct bpf_verifier_state_list, GFP_KERNEL_ACCOUNT);
1561 if (!new_sl)
1562 return -ENOMEM;
1563 env->total_states++;
1564 env->explored_states_size++;
1565 update_peak_states(env);
1566 env->prev_jmps_processed = env->jmps_processed;
1567 env->prev_insn_processed = env->insn_processed;
1568
1569 /* forget precise markings we inherited, see __mark_chain_precision */
1570 if (env->bpf_capable)
1571 mark_all_scalars_imprecise(env, cur);
1572
1573 bpf_clear_singular_ids(env, cur);
1574
1575 /* add new state to the head of linked list */
1576 new = &new_sl->state;
1577 err = bpf_copy_verifier_state(new, cur);
1578 if (err) {
1579 bpf_free_verifier_state(new, false);
1580 kfree(new_sl);
1581 return err;
1582 }
1583 new->insn_idx = insn_idx;
1584 verifier_bug_if(new->branches != 1, env,
1585 "%s:branches_to_explore=%d insn %d",
1586 __func__, new->branches, insn_idx);
1587 err = maybe_enter_scc(env, new);
1588 if (err) {
1589 bpf_free_verifier_state(new, false);
1590 kfree(new_sl);
1591 return err;
1592 }
1593
1594 cur->parent = new;
1595 cur->first_insn_idx = insn_idx;
1596 cur->dfs_depth = new->dfs_depth + 1;
1597 bpf_clear_jmp_history(cur);
1598 list_add(&new_sl->node, head);
1599 return 0;
1600 }
1601