A BPF function can return before its exit instruction: LD_ABS, LD_IND, and tail_call() can all cause it to return prematurely. When such a function is called by another BPF function, the verifier doesn't take this into account when calculating the bounds of r0 in the caller after the callee returns. --- Changes in v2: - Handle LD_ABS and LD_IND, not just tail_call() - Split tests out - Use inline asm for tests --- Arthur Fabre (2): bpf: Don't trust r0 bounds after BPF to BPF calls with abnormal returns selftests/bpf: Test r0 bounds after BPF to BPF call with abnormal return kernel/bpf/verifier.c | 18 ++-- .../selftests/bpf/prog_tests/verifier.c | 2 + .../bpf/progs/verifier_abnormal_ret.c | 88 +++++++++++++++++++ 3 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/verifier_abnormal_ret.c -- 2.34.1