Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bpf: Reenable bpf_refcount_acquire

Now that all reported issues are fixed, bpf_refcount_acquire can be
turned back on. Also reenable all bpf_refcount-related tests which were
disabled.

This a revert of:
* commit f3514a5d6740 ("selftests/bpf: Disable newly-added 'owner' field test until refcount re-enabled")
* commit 7deca5eae833 ("bpf: Disable bpf_refcount_acquire kfunc calls until race conditions are fixed")

Signed-off-by: Dave Marchevsky <davemarchevsky@fb.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20230821193311.3290257-5-davemarchevsky@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Dave Marchevsky and committed by
Alexei Starovoitov
ba2464c8 7e26cd12

+27 -4
+1 -4
kernel/bpf/verifier.c
··· 11217 11217 verbose(env, "arg#%d doesn't point to a type with bpf_refcount field\n", i); 11218 11218 return -EINVAL; 11219 11219 } 11220 - if (rec->refcount_off >= 0) { 11221 - verbose(env, "bpf_refcount_acquire calls are disabled for now\n"); 11222 - return -EINVAL; 11223 - } 11220 + 11224 11221 meta->arg_btf = reg->btf; 11225 11222 meta->arg_btf_id = reg->btf_id; 11226 11223 break;
+26
tools/testing/selftests/bpf/prog_tests/refcounted_kptr.c
··· 9 9 10 10 void test_refcounted_kptr(void) 11 11 { 12 + RUN_TESTS(refcounted_kptr); 12 13 } 13 14 14 15 void test_refcounted_kptr_fail(void) 15 16 { 17 + RUN_TESTS(refcounted_kptr_fail); 16 18 } 17 19 18 20 void test_refcounted_kptr_wrong_owner(void) 19 21 { 22 + LIBBPF_OPTS(bpf_test_run_opts, opts, 23 + .data_in = &pkt_v4, 24 + .data_size_in = sizeof(pkt_v4), 25 + .repeat = 1, 26 + ); 27 + struct refcounted_kptr *skel; 28 + int ret; 29 + 30 + skel = refcounted_kptr__open_and_load(); 31 + if (!ASSERT_OK_PTR(skel, "refcounted_kptr__open_and_load")) 32 + return; 33 + 34 + ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_wrong_owner_remove_fail_a1), &opts); 35 + ASSERT_OK(ret, "rbtree_wrong_owner_remove_fail_a1"); 36 + ASSERT_OK(opts.retval, "rbtree_wrong_owner_remove_fail_a1 retval"); 37 + 38 + ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_wrong_owner_remove_fail_b), &opts); 39 + ASSERT_OK(ret, "rbtree_wrong_owner_remove_fail_b"); 40 + ASSERT_OK(opts.retval, "rbtree_wrong_owner_remove_fail_b retval"); 41 + 42 + ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_wrong_owner_remove_fail_a2), &opts); 43 + ASSERT_OK(ret, "rbtree_wrong_owner_remove_fail_a2"); 44 + ASSERT_OK(opts.retval, "rbtree_wrong_owner_remove_fail_a2 retval"); 45 + refcounted_kptr__destroy(skel); 20 46 }