Re: [PATCH net-next] bpf: enhance verifier to understand stack pointer arithmetic
From: David Miller <davem@davemloft.net>
Date: 2017-05-01 02:57:39
From: David Miller <davem@davemloft.net>
Date: 2017-05-01 02:57:39
From: Alexei Starovoitov <redacted> Date: Sat, 29 Apr 2017 22:52:42 -0700
From: Yonghong Song <redacted> llvm 4.0 and above generates the code like below: .... 440: (b7) r1 = 15 441: (05) goto pc+73 515: (79) r6 = *(u64 *)(r10 -152) 516: (bf) r7 = r10 517: (07) r7 += -112 518: (bf) r2 = r7 519: (0f) r2 += r1 520: (71) r1 = *(u8 *)(r8 +0) 521: (73) *(u8 *)(r2 +45) = r1 .... and the verifier complains "R2 invalid mem access 'inv'" for insn #521. This is because verifier marks register r2 as unknown value after #519 where r2 is a stack pointer and r1 holds a constant value. Teach verifier to recognize "stack_ptr + imm" and "stack_ptr + reg with const val" as valid stack_ptr with new offset. Signed-off-by: Yonghong Song <redacted> Acked-by: Martin KaFai Lau <redacted> Acked-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org> --- technically it's 'net' material, but it's too late for 'net', hence 'net-next' tag. No 'Fixes' tag, since it's only seen with newer llvm.
Applied to net-next, but I'll queue this up to -stable.