* [PATCH bpf-next v4 0/2] bpf: Reject offset refcount acquire arguments
@ 2026-06-23 6:11 Yiyang Chen
2026-06-23 6:11 ` [PATCH bpf-next v4 1/2] " Yiyang Chen
2026-06-23 6:11 ` [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets Yiyang Chen
0 siblings, 2 replies; 8+ messages in thread
From: Yiyang Chen @ 2026-06-23 6:11 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Eduard Zingerman, Kumar Kartikeya Dwivedi
Cc: Yiyang Chen, John Fastabend, Martin KaFai Lau, Song Liu,
Yonghong Song, Jiri Olsa, Emil Tsalapatis, Shuah Khan,
Viktor Malik, Leon Hwang, Dave Marchevsky, bpf, linux-kselftest,
linux-kernel
bpf_refcount_acquire() is modeled as returning a refcounted allocation
base, but it currently accepts PTR_TO_BTF_ID | MEM_ALLOC arguments whose
offset already points at an embedded graph node returned from a list or
rbtree operation.
At runtime the kfunc starts from the supplied pointer and adds the type's
refcount offset. With a graph-node pointer, that starts from base +
node_off, while the verifier treats the returned pointer as the allocation
base. Reject non-zero fixed-offset arguments to keep the runtime operation
and the verifier model aligned.
Programs that pop graph nodes can still acquire a reference after
normalizing the node pointer with container_of().
Patch 1 handles the zero fixed-offset requirement in the existing
check_func_arg_reg_off() / __check_ptr_off_reg() path without consuming a
bpf_type_flag bit.
Patch 2 adds a rejected direct list-node case.
Changes from v3:
- Add Eduard's Acked-by to patch 1.
- Drop the redundant rbtree selftest case; the list case exercises the same
refcount-acquire fixed-offset rejection path.
- Trim the selftest commit message and remove the selftest Fixes tag.
Changes from v2:
- Avoid adding a new bpf_type_flag bit.
- Carry the refcount-acquire zero fixed-offset requirement with an
internal check_func_arg_reg_off() parameter.
Changes from v1:
- Move zero fixed-offset enforcement into check_func_arg_reg_off() /
__check_ptr_off_reg(), as suggested by Eduard.
- Drop the positive container_of() selftest case.
- Remove the stale bpf_obj_drop() after bpf_list_push_front(), since the
pushed reference is consumed even when the verifier explores the error
branch.
- Rebase to bpf-next master a975094bf98c.
v3: https://lore.kernel.org/bpf/cover.1781979133.git.chenyy23@mails.tsinghua.edu.cn/
v2: https://lore.kernel.org/bpf/cover.1781963957.git.chenyy23@mails.tsinghua.edu.cn/
v1: https://lore.kernel.org/bpf/cover.1781852308.git.chenyy23@mails.tsinghua.edu.cn/
Yiyang Chen (2):
bpf: Reject offset refcount acquire arguments
selftests/bpf: Cover refcount acquire node offsets
kernel/bpf/verifier.c | 32 +++++++++++------
.../bpf/progs/refcounted_kptr_fail.c | 34 +++++++++++++++++++
2 files changed, 56 insertions(+), 10 deletions(-)
base-commit: a975094bf98ca97be9146f9d3b5681a6f9cf5ce3
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH bpf-next v4 1/2] bpf: Reject offset refcount acquire arguments 2026-06-23 6:11 [PATCH bpf-next v4 0/2] bpf: Reject offset refcount acquire arguments Yiyang Chen @ 2026-06-23 6:11 ` Yiyang Chen 2026-06-23 7:01 ` bot+bpf-ci 2026-06-25 21:30 ` Yonghong Song 2026-06-23 6:11 ` [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets Yiyang Chen 1 sibling, 2 replies; 8+ messages in thread From: Yiyang Chen @ 2026-06-23 6:11 UTC (permalink / raw) To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi Cc: Yiyang Chen, John Fastabend, Martin KaFai Lau, Song Liu, Yonghong Song, Jiri Olsa, Emil Tsalapatis, Shuah Khan, Viktor Malik, Leon Hwang, Dave Marchevsky, bpf, linux-kselftest, linux-kernel bpf_refcount_acquire() increments the refcount at the caller-supplied pointer plus the refcount field offset, then returns the caller-supplied pointer unchanged. The verifier records the return value as a base pointer to the refcounted object. bpf_list_pop_front() and bpf_rbtree_remove() can return embedded graph-node pointers as PTR_TO_BTF_ID | MEM_ALLOC with a fixed offset equal to the node field offset. Passing such a pointer directly to bpf_refcount_acquire() currently passes the refcounted-kptr type check. That makes the runtime operation start from base + node_off while the verifier models the returned pointer as the object base. Require refcount-acquire arguments to have zero fixed offset by carrying the requirement through check_func_arg_reg_off() to __check_ptr_off_reg(). Programs can still acquire a refcount from a graph-node-derived pointer after normalizing it with container_of(). Fixes: 7c50b1cb76aca ("bpf: Add bpf_refcount_acquire kfunc") Signed-off-by: Yiyang Chen <chenyy23@mails.tsinghua.edu.cn> Acked-by: Eduard Zingerman <eddyz87@gmail.com> --- kernel/bpf/verifier.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 2abc79dbf..f65eff28e 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -7990,9 +7990,10 @@ reg_find_field_offset(const struct bpf_reg_state *reg, s32 off, u32 fields) return field; } -static int check_func_arg_reg_off(struct bpf_verifier_env *env, - const struct bpf_reg_state *reg, argno_t argno, - enum bpf_arg_type arg_type) +static int __check_func_arg_reg_off(struct bpf_verifier_env *env, + const struct bpf_reg_state *reg, argno_t argno, + enum bpf_arg_type arg_type, + bool btf_id_fixed_off_ok) { u32 type = reg->type; @@ -8049,12 +8050,11 @@ static int check_func_arg_reg_off(struct bpf_verifier_env *env, case PTR_TO_BTF_ID | MEM_ALLOC | NON_OWN_REF | MEM_RCU: /* When referenced PTR_TO_BTF_ID is passed to release function, * its fixed offset must be 0. In the other cases, fixed offset - * can be non-zero. This was already checked above. So pass - * fixed_off_ok as true to allow fixed offset for all other - * cases. var_off always must be 0 for PTR_TO_BTF_ID, hence we - * still need to do checks instead of returning. + * can be non-zero unless the caller requires otherwise. + * var_off always must be 0 for PTR_TO_BTF_ID, hence we still + * need to do checks instead of returning. */ - return __check_ptr_off_reg(env, reg, argno, true); + return __check_ptr_off_reg(env, reg, argno, btf_id_fixed_off_ok); case PTR_TO_CTX: /* * Allow fixed and variable offsets for syscall context, but @@ -8070,6 +8070,13 @@ static int check_func_arg_reg_off(struct bpf_verifier_env *env, } } +static int check_func_arg_reg_off(struct bpf_verifier_env *env, + const struct bpf_reg_state *reg, argno_t argno, + enum bpf_arg_type arg_type) +{ + return __check_func_arg_reg_off(env, reg, argno, arg_type, true); +} + static int check_arg_const_str(struct bpf_verifier_env *env, struct bpf_reg_state *reg, argno_t argno) { @@ -11941,6 +11948,7 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ enum bpf_arg_type arg_type = ARG_DONTCARE; argno_t argno = argno_from_arg(i + 1); int regno = reg_from_argno(argno); + bool btf_id_fixed_off_ok = true; u32 ref_id, type_size; bool is_ret_buf_sz = false; int kf_arg_type; @@ -12114,7 +12122,6 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ case KF_ARG_PTR_TO_MEM: case KF_ARG_PTR_TO_MEM_SIZE: case KF_ARG_PTR_TO_CALLBACK: - case KF_ARG_PTR_TO_REFCOUNTED_KPTR: case KF_ARG_PTR_TO_CONST_STR: case KF_ARG_PTR_TO_WORKQUEUE: case KF_ARG_PTR_TO_TIMER: @@ -12128,6 +12135,10 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ case KF_ARG_PTR_TO_CTX: arg_type = ARG_PTR_TO_CTX; break; + case KF_ARG_PTR_TO_REFCOUNTED_KPTR: + arg_type = ARG_PTR_TO_BTF_ID; + btf_id_fixed_off_ok = false; + break; default: verifier_bug(env, "unknown kfunc arg type %d", kf_arg_type); return -EFAULT; @@ -12135,7 +12146,8 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ if (regno == meta->release_regno) arg_type |= OBJ_RELEASE; - ret = check_func_arg_reg_off(env, reg, argno, arg_type); + ret = __check_func_arg_reg_off(env, reg, argno, arg_type, + btf_id_fixed_off_ok); if (ret < 0) return ret; -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next v4 1/2] bpf: Reject offset refcount acquire arguments 2026-06-23 6:11 ` [PATCH bpf-next v4 1/2] " Yiyang Chen @ 2026-06-23 7:01 ` bot+bpf-ci 2026-06-23 21:52 ` Emil Tsalapatis 2026-06-25 21:30 ` Yonghong Song 1 sibling, 1 reply; 8+ messages in thread From: bot+bpf-ci @ 2026-06-23 7:01 UTC (permalink / raw) To: chenyy23, ast, daniel, andrii, eddyz87, memxor Cc: chenyy23, john.fastabend, martin.lau, song, yonghong.song, jolsa, emil, shuah, vmalik, leon.hwang, davemarchevsky, bpf, linux-kselftest, linux-kernel, ast, andrii, daniel, martin.lau, eddyz87, yonghong.song, clm, ihor.solodrai [-- Attachment #1: Type: text/plain, Size: 1038 bytes --] > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index 2abc79dbf281..f65eff28ecd2 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c [ ... ] > @@ -12135,7 +12146,8 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ > > if (regno == meta->release_regno) > arg_type |= OBJ_RELEASE; > - ret = check_func_arg_reg_off(env, reg, argno, arg_type); > + ret = __check_func_arg_reg_off(env, reg, argno, arg_type, > + btf_id_fixed_off_ok); This isn't a bug, but does this call need to be split across two lines? The line length limit is 100 characters, and it looks like it would fit on a single line: ret = __check_func_arg_reg_off(env, reg, argno, arg_type, btf_id_fixed_off_ok); > if (ret < 0) > return ret; --- AI reviewed your patch. Please fix the bug or email reply why it's not a bug. See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md CI run summary: https://github.com/kernel-patches/bpf/actions/runs/28007209948 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next v4 1/2] bpf: Reject offset refcount acquire arguments 2026-06-23 7:01 ` bot+bpf-ci @ 2026-06-23 21:52 ` Emil Tsalapatis 0 siblings, 0 replies; 8+ messages in thread From: Emil Tsalapatis @ 2026-06-23 21:52 UTC (permalink / raw) To: bot+bpf-ci, chenyy23, ast, daniel, andrii, eddyz87, memxor Cc: john.fastabend, martin.lau, song, yonghong.song, jolsa, emil, shuah, vmalik, leon.hwang, davemarchevsky, bpf, linux-kselftest, linux-kernel, martin.lau, clm, ihor.solodrai On Tue Jun 23, 2026 at 3:01 AM EDT, bot+bpf-ci wrote: >> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c >> index 2abc79dbf281..f65eff28ecd2 100644 >> --- a/kernel/bpf/verifier.c >> +++ b/kernel/bpf/verifier.c > > [ ... ] > >> @@ -12135,7 +12146,8 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ >> >> if (regno == meta->release_regno) >> arg_type |= OBJ_RELEASE; >> - ret = check_func_arg_reg_off(env, reg, argno, arg_type); >> + ret = __check_func_arg_reg_off(env, reg, argno, arg_type, >> + btf_id_fixed_off_ok); > > This isn't a bug, but does this call need to be split across two lines? > The line length limit is 100 characters, and it looks like it would fit > on a single line: Bot is right, we don't split diagnostics across lines. > > ret = __check_func_arg_reg_off(env, reg, argno, arg_type, btf_id_fixed_off_ok); > >> if (ret < 0) >> return ret; > > > --- > AI reviewed your patch. Please fix the bug or email reply why it's not a bug. > See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md > > CI run summary: https://github.com/kernel-patches/bpf/actions/runs/28007209948 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next v4 1/2] bpf: Reject offset refcount acquire arguments 2026-06-23 6:11 ` [PATCH bpf-next v4 1/2] " Yiyang Chen 2026-06-23 7:01 ` bot+bpf-ci @ 2026-06-25 21:30 ` Yonghong Song 1 sibling, 0 replies; 8+ messages in thread From: Yonghong Song @ 2026-06-25 21:30 UTC (permalink / raw) To: Yiyang Chen, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi Cc: John Fastabend, Martin KaFai Lau, Song Liu, Jiri Olsa, Emil Tsalapatis, Shuah Khan, Viktor Malik, Leon Hwang, Dave Marchevsky, bpf, linux-kselftest, linux-kernel On 6/22/26 11:11 PM, Yiyang Chen wrote: > bpf_refcount_acquire() increments the refcount at the caller-supplied > pointer plus the refcount field offset, then returns the caller-supplied > pointer unchanged. > > The verifier records the return value as a base pointer to the refcounted > object. > > bpf_list_pop_front() and bpf_rbtree_remove() can return embedded > graph-node pointers as PTR_TO_BTF_ID | MEM_ALLOC with a fixed offset equal > to the node field offset. Passing such a pointer directly to > bpf_refcount_acquire() currently passes the refcounted-kptr type check. > > That makes the runtime operation start from base + node_off while the > verifier models the returned pointer as the object base. > > Require refcount-acquire arguments to have zero fixed offset by carrying > the requirement through check_func_arg_reg_off() to __check_ptr_off_reg(). > Programs can still acquire a refcount from a graph-node-derived pointer > after normalizing it with container_of(). > > Fixes: 7c50b1cb76aca ("bpf: Add bpf_refcount_acquire kfunc") > Signed-off-by: Yiyang Chen <chenyy23@mails.tsinghua.edu.cn> > Acked-by: Eduard Zingerman <eddyz87@gmail.com> Acked-by: Yonghong Song <yonghong.song@linux.dev> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets 2026-06-23 6:11 [PATCH bpf-next v4 0/2] bpf: Reject offset refcount acquire arguments Yiyang Chen 2026-06-23 6:11 ` [PATCH bpf-next v4 1/2] " Yiyang Chen @ 2026-06-23 6:11 ` Yiyang Chen 2026-06-23 21:50 ` Emil Tsalapatis 2026-06-25 21:39 ` Yonghong Song 1 sibling, 2 replies; 8+ messages in thread From: Yiyang Chen @ 2026-06-23 6:11 UTC (permalink / raw) To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi Cc: Yiyang Chen, John Fastabend, Martin KaFai Lau, Song Liu, Yonghong Song, Jiri Olsa, Emil Tsalapatis, Shuah Khan, Viktor Malik, Leon Hwang, Dave Marchevsky, bpf, linux-kselftest, linux-kernel Add regression coverage for bpf_refcount_acquire() on graph-node-derived pointers. The rejected case passes a popped list node pointer directly to bpf_refcount_acquire(), which must fail because the pointer carries a non-zero fixed offset. Signed-off-by: Yiyang Chen <chenyy23@mails.tsinghua.edu.cn> --- .../bpf/progs/refcounted_kptr_fail.c | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c b/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c index 7247a20c0..024ef2aae 100644 --- a/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c +++ b/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c @@ -13,12 +13,20 @@ struct node_acquire { struct bpf_refcount refcount; }; +struct node_refcounted { + long key; + struct bpf_list_node list; + struct bpf_refcount refcount; +}; + extern void bpf_rcu_read_lock(void) __ksym; extern void bpf_rcu_read_unlock(void) __ksym; #define private(name) SEC(".data." #name) __hidden __attribute__((aligned(8))) private(A) struct bpf_spin_lock glock; private(A) struct bpf_rb_root groot __contains(node_acquire, node); +private(B) struct bpf_spin_lock lock; +private(B) struct bpf_list_head head __contains(node_refcounted, list); static bool less(struct bpf_rb_node *a, const struct bpf_rb_node *b) { @@ -93,6 +101,32 @@ long rbtree_refcounted_node_ref_escapes_owning_input(void *ctx) return 0; } +SEC("?tc") +__failure __msg("dereference of modified ptr_ ptr R1") +long refcount_acquire_list_node_offset(void *ctx) +{ + struct node_refcounted *node, *base, *ref; + struct bpf_list_node *list_node; + + node = bpf_obj_new(typeof(*node)); + if (!node) + return 1; + + bpf_spin_lock(&lock); + bpf_list_push_front(&head, &node->list); + list_node = bpf_list_pop_front(&head); + bpf_spin_unlock(&lock); + if (!list_node) + return 2; + + base = container_of(list_node, struct node_refcounted, list); + ref = bpf_refcount_acquire(list_node); + if (ref) + bpf_obj_drop(ref); + bpf_obj_drop(base); + return 0; +} + SEC("?fentry.s/" SYS_PREFIX "sys_getpgid") __failure __msg("function calls are not allowed while holding a lock") int BPF_PROG(rbtree_fail_sleepable_lock_across_rcu, -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets 2026-06-23 6:11 ` [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets Yiyang Chen @ 2026-06-23 21:50 ` Emil Tsalapatis 2026-06-25 21:39 ` Yonghong Song 1 sibling, 0 replies; 8+ messages in thread From: Emil Tsalapatis @ 2026-06-23 21:50 UTC (permalink / raw) To: Yiyang Chen, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi Cc: John Fastabend, Martin KaFai Lau, Song Liu, Yonghong Song, Jiri Olsa, Emil Tsalapatis, Shuah Khan, Viktor Malik, Leon Hwang, Dave Marchevsky, bpf, linux-kselftest, linux-kernel On Tue Jun 23, 2026 at 2:11 AM EDT, Yiyang Chen wrote: > Add regression coverage for bpf_refcount_acquire() on graph-node-derived > pointers. > > The rejected case passes a popped list node pointer directly to > bpf_refcount_acquire(), which must fail because the pointer carries a > non-zero fixed offset. > > Signed-off-by: Yiyang Chen <chenyy23@mails.tsinghua.edu.cn> Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com> > --- > .../bpf/progs/refcounted_kptr_fail.c | 34 +++++++++++++++++++ > 1 file changed, 34 insertions(+) > > diff --git a/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c b/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c > index 7247a20c0..024ef2aae 100644 > --- a/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c > +++ b/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c > @@ -13,12 +13,20 @@ struct node_acquire { > struct bpf_refcount refcount; > }; > > +struct node_refcounted { > + long key; > + struct bpf_list_node list; > + struct bpf_refcount refcount; > +}; > + > extern void bpf_rcu_read_lock(void) __ksym; > extern void bpf_rcu_read_unlock(void) __ksym; > > #define private(name) SEC(".data." #name) __hidden __attribute__((aligned(8))) > private(A) struct bpf_spin_lock glock; > private(A) struct bpf_rb_root groot __contains(node_acquire, node); > +private(B) struct bpf_spin_lock lock; > +private(B) struct bpf_list_head head __contains(node_refcounted, list); > > static bool less(struct bpf_rb_node *a, const struct bpf_rb_node *b) > { > @@ -93,6 +101,32 @@ long rbtree_refcounted_node_ref_escapes_owning_input(void *ctx) > return 0; > } > > +SEC("?tc") > +__failure __msg("dereference of modified ptr_ ptr R1") > +long refcount_acquire_list_node_offset(void *ctx) > +{ > + struct node_refcounted *node, *base, *ref; > + struct bpf_list_node *list_node; > + > + node = bpf_obj_new(typeof(*node)); > + if (!node) > + return 1; > + > + bpf_spin_lock(&lock); > + bpf_list_push_front(&head, &node->list); > + list_node = bpf_list_pop_front(&head); > + bpf_spin_unlock(&lock); > + if (!list_node) > + return 2; > + > + base = container_of(list_node, struct node_refcounted, list); > + ref = bpf_refcount_acquire(list_node); > + if (ref) > + bpf_obj_drop(ref); > + bpf_obj_drop(base); > + return 0; > +} > + > SEC("?fentry.s/" SYS_PREFIX "sys_getpgid") > __failure __msg("function calls are not allowed while holding a lock") > int BPF_PROG(rbtree_fail_sleepable_lock_across_rcu, ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets 2026-06-23 6:11 ` [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets Yiyang Chen 2026-06-23 21:50 ` Emil Tsalapatis @ 2026-06-25 21:39 ` Yonghong Song 1 sibling, 0 replies; 8+ messages in thread From: Yonghong Song @ 2026-06-25 21:39 UTC (permalink / raw) To: Yiyang Chen, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi Cc: John Fastabend, Martin KaFai Lau, Song Liu, Jiri Olsa, Emil Tsalapatis, Shuah Khan, Viktor Malik, Leon Hwang, Dave Marchevsky, bpf, linux-kselftest, linux-kernel On 6/22/26 11:11 PM, Yiyang Chen wrote: > Add regression coverage for bpf_refcount_acquire() on graph-node-derived > pointers. > > The rejected case passes a popped list node pointer directly to > bpf_refcount_acquire(), which must fail because the pointer carries a > non-zero fixed offset. > > Signed-off-by: Yiyang Chen <chenyy23@mails.tsinghua.edu.cn> Acked-by: Yonghong Song <yonghong.song@linux.dev> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-06-25 21:39 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-06-23 6:11 [PATCH bpf-next v4 0/2] bpf: Reject offset refcount acquire arguments Yiyang Chen 2026-06-23 6:11 ` [PATCH bpf-next v4 1/2] " Yiyang Chen 2026-06-23 7:01 ` bot+bpf-ci 2026-06-23 21:52 ` Emil Tsalapatis 2026-06-25 21:30 ` Yonghong Song 2026-06-23 6:11 ` [PATCH bpf-next v4 2/2] selftests/bpf: Cover refcount acquire node offsets Yiyang Chen 2026-06-23 21:50 ` Emil Tsalapatis 2026-06-25 21:39 ` Yonghong Song
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox