]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - kernel/bpf/verifier.c
bpf: Add new bpf map type to store the pointer to struct perf_event
[mirror_ubuntu-hirsute-kernel.git] / kernel / bpf / verifier.c
index 039d866fd36ab0e1d553166acbf2aa8b86bbab06..cd307df98cb33fca49c2e02704336f0bdd7c736d 100644 (file)
@@ -648,6 +648,9 @@ static int check_mem_access(struct verifier_env *env, u32 regno, int off,
        struct verifier_state *state = &env->cur_state;
        int size, err = 0;
 
+       if (state->regs[regno].type == PTR_TO_STACK)
+               off += state->regs[regno].imm;
+
        size = bpf_size_to_bytes(bpf_size);
        if (size < 0)
                return size;
@@ -667,7 +670,8 @@ static int check_mem_access(struct verifier_env *env, u32 regno, int off,
                if (!err && t == BPF_READ && value_regno >= 0)
                        mark_reg_unknown_value(state->regs, value_regno);
 
-       } else if (state->regs[regno].type == FRAME_PTR) {
+       } else if (state->regs[regno].type == FRAME_PTR ||
+                  state->regs[regno].type == PTR_TO_STACK) {
                if (off >= 0 || off < -MAX_BPF_STACK) {
                        verbose("invalid stack off=%d size=%d\n", off, size);
                        return -EACCES;