diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 4fca456ba27a..edb19ada0405 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -2385,6 +2385,9 @@ static int check_stack_write_fixed_off(struct bpf_verifier_env *env, return err; } save_register_state(state, spi, reg, size); + /* Break the relation on a narrowing spill. */ + if (fls64(reg->umax_value) > BITS_PER_BYTE * size) + state->stack[spi].spilled_ptr.id = 0; } else if (!reg && !(off % BPF_REG_SIZE) && is_bpf_st_mem(insn) && insn->imm != 0 && env->bpf_capable) { struct bpf_reg_state fake_reg = {};