On Tue, Sep 11, 2018 at 05:36:37PM -0700, Joe Stringer wrote:
> reference tracking: leak potential reference
> reference tracking: leak potential reference on stack
> reference tracking: leak potential reference on stack 2
> reference tracking: zero potential reference
> reference tracking: copy and zero potential references
> reference tracking: release reference without check
> reference tracking: release reference
> reference tracking: release reference twice
> reference tracking: release reference twice inside branch
> reference tracking: alloc, check, free in one subbranch
> reference tracking: alloc, check, free in both subbranches
> reference tracking in call: free reference in subprog
> reference tracking in call: free reference in subprog and outside
> reference tracking in call: alloc & leak reference in subprog
> reference tracking in call: alloc in subprog, release outside
> reference tracking in call: sk_ptr leak into caller stack
> reference tracking in call: sk_ptr spill into caller stack
> 
> Signed-off-by: Joe Stringer <j...@wand.net.nz>
...
> +             "reference tracking in call: alloc in subprog, release outside",
> +             .insns = {
> +                     BPF_MOV64_REG(BPF_REG_4, BPF_REG_10),
> +                     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 5),
> +                     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
> +                     BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
> +                     BPF_MOV64_IMM(BPF_REG_2, 0),
> +                     BPF_EMIT_CALL(BPF_FUNC_sk_release),
> +                     BPF_EXIT_INSN(),
> +
> +                     /* subprog 1 */
> +                     BPF_SK_LOOKUP,
> +                     BPF_EXIT_INSN(), /* return sk */
> +             },

Thanks a lot for adding subprog tests and checking that return to the caller
and spill works too.
Awesome stuff!

Acked-by: Alexei Starovoitov <a...@kernel.org>

Reply via email to