selftests/bpf: Add test passing MAYBE_NULL reg to bpf_refcount_acquire
authorDave Marchevsky <davemarchevsky@fb.com>
Tue, 7 Nov 2023 08:56:35 +0000 (00:56 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 10 Nov 2023 03:07:51 +0000 (19:07 -0800)
The test added in this patch exercises the logic fixed in the previous
patch in this series. Before the previous patch's changes,
bpf_refcount_acquire accepts MAYBE_NULL local kptrs; after the change
the verifier correctly rejects the such a call.

Signed-off-by: Dave Marchevsky <davemarchevsky@fb.com>
Link: https://lore.kernel.org/r/20231107085639.3016113-3-davemarchevsky@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c

index 1ef07f6..1553b9c 100644 (file)
@@ -53,6 +53,25 @@ long rbtree_refcounted_node_ref_escapes(void *ctx)
        return 0;
 }
 
+SEC("?tc")
+__failure __msg("Possibly NULL pointer passed to trusted arg0")
+long refcount_acquire_maybe_null(void *ctx)
+{
+       struct node_acquire *n, *m;
+
+       n = bpf_obj_new(typeof(*n));
+       /* Intentionally not testing !n
+        * it's MAYBE_NULL for refcount_acquire
+        */
+       m = bpf_refcount_acquire(n);
+       if (m)
+               bpf_obj_drop(m);
+       if (n)
+               bpf_obj_drop(n);
+
+       return 0;
+}
+
 SEC("?tc")
 __failure __msg("Unreleased reference id=3 alloc_insn=9")
 long rbtree_refcounted_node_ref_escapes_owning_input(void *ctx)