Hello, On Thu, Feb 27, 2025 at 06:34:37PM -0800, Alexei Starovoitov wrote: > > Hmm... would that mean a non-sched_ext bpf prog would be able to call e.g. > > scx_bpf_dsq_insert()? > > Not as far as I can tell. > scx_kfunc_ids_unlocked[] doesn't include scx_bpf_dsq_insert. > It's part of scx_kfunc_ids_enqueue_dispatch[]. > > So this bit in patch 3 enables it: > + if ((flags & SCX_OPS_KF_ENQUEUE) && > + btf_id_set8_contains(&scx_kfunc_ids_enqueue_dispatch, kfunc_id)) > > and in patch 2: > + [SCX_OP_IDX(enqueue)] = SCX_OPS_KF_ENQUEUE, > > So scx_bpf_dsq_insert() kfunc can only be called out > of enqueue() sched-ext hook. > > So the restriction is still the same. afaict. Hmm... maybe I'm missing something: static int scx_kfunc_ids_ops_context_sensitive_filter(const struct bpf_prog *prog, u32 kfunc_id) { u32 moff, flags; // allow non-context sensitive kfuncs if (!btf_id_set8_contains(&scx_kfunc_ids_ops_context_sensitive, kfunc_id)) return 0; // allow unlocked to be called form all SYSCALL progs if (prog->type == BPF_PROG_TYPE_SYSCALL && btf_id_set8_contains(&scx_kfunc_ids_unlocked, kfunc_id)) return 0; // *** HERE, allow if the prog is not SCX *** if (prog->type == BPF_PROG_TYPE_STRUCT_OPS && prog->aux->st_ops != &bpf_sched_ext_ops) return 0; /* prog->type == BPF_PROG_TYPE_STRUCT_OPS && prog->aux->st_ops == &bpf_sched_ext_ops*/ // other context sensitive allow's So, I think it'd say yes if a non-SCX BPF prog tries to call a context sensitive SCX kfunc. Thanks. -- tejun