On Mon, Feb 5, 2024 at 7:02 AM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > Allow transferring an imbalanced RCU lock state between subprog calls > during verification. This allows patterns where a subprog call returns > with an RCU lock held, or a subprog call releases an RCU lock held by > the caller. Currently, the verifier would end up complaining if the RCU > lock is not released when processing an exit from a subprog, which is > non-ideal if its execution is supposed to be enclosed in an RCU read > section of the caller. > > Instead, simply only check whether we are processing exit for frame#0 > and do not complain on an active RCU lock otherwise. We only need to > update the check when processing BPF_EXIT insn, as copy_verifier_state > is already set up to do the right thing. > > Suggested-by: David Vernet <void@xxxxxxxxxxxxx> > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> Tested-by: Yafang Shao <laoar.shao@xxxxxxxxx> > --- > kernel/bpf/verifier.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index 64fa188d00ad..993712b9996b 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c > @@ -17698,8 +17698,7 @@ static int do_check(struct bpf_verifier_env *env) > return -EINVAL; > } > > - if (env->cur_state->active_rcu_lock && > - !in_rbtree_lock_required_cb(env)) { > + if (env->cur_state->active_rcu_lock && !env->cur_state->curframe) { > verbose(env, "bpf_rcu_read_unlock is missing\n"); > return -EINVAL; > } > -- > 2.40.1 > > -- Regards Yafang