/* 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 <jserv@ccns.ncku.edu.tw> * Copyright (C) 2026 Cheng-Yang Chou <yphbchou0911@gmail.com> */ #include <bpf/bpf.h> #include <scx/common.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #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)