/* SPDX-License-Identifier: GPL-2.0 */ /* * Verify that context-sensitive SCX kfuncs (even "unlocked" ones) are * restricted to only SCX struct_ops programs. Non-SCX struct_ops programs, * such as TCP congestion control programs, should be rejected by the BPF * verifier when attempting to call these kfuncs. * * Copyright (C) 2026 Ching-Chun (Jim) Huang * Copyright (C) 2026 Cheng-Yang Chou */ #include #include #include #include #include #include "non_scx_kfunc_deny.bpf.skel.h" #include "scx_test.h" static enum scx_test_status run(void *ctx) { struct non_scx_kfunc_deny *skel; int err; skel = non_scx_kfunc_deny__open(); if (!skel) { SCX_ERR("Failed to open skel"); return SCX_TEST_FAIL; } err = non_scx_kfunc_deny__load(skel); non_scx_kfunc_deny__destroy(skel); if (err == 0) { SCX_ERR("non-SCX BPF program loaded when it should have been rejected"); return SCX_TEST_FAIL; } return SCX_TEST_PASS; } struct scx_test non_scx_kfunc_deny = { .name = "non_scx_kfunc_deny", .description = "Verify that non-SCX struct_ops programs cannot call SCX kfuncs", .run = run, }; REGISTER_SCX_TEST(&non_scx_kfunc_deny)