From: Daniel Borkmann Date: Sat, 10 Jun 2017 22:50:41 +0000 (+0200) Subject: bpf: don't check spilled reg state for non-STACK_SPILLed type slots X-Git-Tag: pci-v4.13-fixes-1~86^2~221^2~6 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d25da6caa2a1d6644360c40d7c5fd7c057551360;p=users%2Fdwmw2%2Flinux.git bpf: don't check spilled reg state for non-STACK_SPILLed type slots spilled_regs[] state is only used for stack slots of type STACK_SPILL, never for STACK_MISC. Right now, in states_equal(), even if we have old and current stack state of type STACK_MISC, we compare spilled_regs[] for that particular offset. Just skip these like we do everywhere else. Signed-off-by: Daniel Borkmann Acked-by: Alexei Starovoitov Signed-off-by: David S. Miller --- diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 14ccb0759fa4d..d031b3b0752ea 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -2828,6 +2828,8 @@ static bool states_equal(struct bpf_verifier_env *env, return false; if (i % BPF_REG_SIZE) continue; + if (old->stack_slot_type[i] != STACK_SPILL) + continue; if (memcmp(&old->spilled_regs[i / BPF_REG_SIZE], &cur->spilled_regs[i / BPF_REG_SIZE], sizeof(old->spilled_regs[0])))