On Mon, Mar 18, 2024 at 11:52 PM Eduard Zingerman eddyz87@gmail.com wrote:
On Fri, 2024-03-15 at 15:29 +0100, Benjamin Tissoires wrote:
This patch looks good to me, please see two nitpicks below. Acked-by: Eduard Zingerman eddyz87@gmail.com
Thanks!
[...]
@@ -1350,6 +1358,11 @@ BPF_CALL_3(bpf_timer_start, struct bpf_timer_kern *, timer, u64, nsecs, u64, fla goto out; }
if (t->is_sleepable && !(flags & BPF_F_TIMER_SLEEPABLE)) {
ret = -EINVAL;
goto out;
}
Nit: the BPF_F_TIMER_ABS and BPF_F_TIMER_CPU_PIN don't affect sleepable timers, should this check be changed to: '(t->is_sleepable && flags != BPF_F_TIMER_SLEEPABLE)' ?
Sounds fair enough. Scheduled this for v5
[...]
@@ -12151,6 +12175,16 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn, } }
if (is_async_callback_calling_kfunc(meta.func_id)) {
err = push_callback_call(env, insn, insn_idx, meta.subprogno,
set_timer_callback_state);
Nit: still think that this fragment would be better as:
if (is_bpf_timer_set_sleepable_cb_impl_kfunc(meta.func_id)) { err = push_callback_call(env, insn, insn_idx, meta.subprogno, set_timer_callback_state);
Because of the 'set_timer_callback_state' passed to push_callback_call().
Yeah, sorry I missed that part from the previous reviews.
Fixed in v5
Cheers, Benjamin
if (err) {
verbose(env, "kfunc %s#%d failed callback verification\n",
func_name, meta.func_id);
return err;
}
}
rcu_lock = is_kfunc_bpf_rcu_read_lock(&meta); rcu_unlock = is_kfunc_bpf_rcu_read_unlock(&meta);