Loading include/linux/bpf.h +1 −0 Original line number Diff line number Diff line Loading @@ -171,6 +171,7 @@ struct bpf_prog_aux { atomic_t refcnt; u32 used_map_cnt; u32 max_ctx_offset; u32 stack_depth; struct latch_tree_node ksym_tnode; struct list_head ksym_lnode; const struct bpf_verifier_ops *ops; Loading kernel/bpf/verifier.c +9 −1 Original line number Diff line number Diff line Loading @@ -926,6 +926,10 @@ static int check_mem_access(struct bpf_verifier_env *env, u32 regno, int off, verbose("invalid stack off=%d size=%d\n", off, size); return -EACCES; } if (env->prog->aux->stack_depth < -off) env->prog->aux->stack_depth = -off; if (t == BPF_WRITE) { if (!env->allow_ptr_leaks && state->stack_slot_type[MAX_BPF_STACK + off] == STACK_SPILL && Loading Loading @@ -1032,6 +1036,9 @@ static int check_stack_boundary(struct bpf_verifier_env *env, int regno, return -EACCES; } if (env->prog->aux->stack_depth < -off) env->prog->aux->stack_depth = -off; if (meta && meta->raw_mode) { meta->access_size = access_size; meta->regno = regno; Loading Loading @@ -3167,7 +3174,8 @@ static int do_check(struct bpf_verifier_env *env) insn_idx++; } verbose("processed %d insns\n", insn_processed); verbose("processed %d insns, stack depth %d\n", insn_processed, env->prog->aux->stack_depth); return 0; } Loading Loading
include/linux/bpf.h +1 −0 Original line number Diff line number Diff line Loading @@ -171,6 +171,7 @@ struct bpf_prog_aux { atomic_t refcnt; u32 used_map_cnt; u32 max_ctx_offset; u32 stack_depth; struct latch_tree_node ksym_tnode; struct list_head ksym_lnode; const struct bpf_verifier_ops *ops; Loading
kernel/bpf/verifier.c +9 −1 Original line number Diff line number Diff line Loading @@ -926,6 +926,10 @@ static int check_mem_access(struct bpf_verifier_env *env, u32 regno, int off, verbose("invalid stack off=%d size=%d\n", off, size); return -EACCES; } if (env->prog->aux->stack_depth < -off) env->prog->aux->stack_depth = -off; if (t == BPF_WRITE) { if (!env->allow_ptr_leaks && state->stack_slot_type[MAX_BPF_STACK + off] == STACK_SPILL && Loading Loading @@ -1032,6 +1036,9 @@ static int check_stack_boundary(struct bpf_verifier_env *env, int regno, return -EACCES; } if (env->prog->aux->stack_depth < -off) env->prog->aux->stack_depth = -off; if (meta && meta->raw_mode) { meta->access_size = access_size; meta->regno = regno; Loading Loading @@ -3167,7 +3174,8 @@ static int do_check(struct bpf_verifier_env *env) insn_idx++; } verbose("processed %d insns\n", insn_processed); verbose("processed %d insns, stack depth %d\n", insn_processed, env->prog->aux->stack_depth); return 0; } Loading