xref: /linux/tools/testing/selftests/bpf/prog_tests/kernel_flag.c (revision 4f9786035f9e519db41375818e1d0b5f20da2f10)
1*7987f162SBlaise Boscaccy // SPDX-License-Identifier: GPL-2.0
2*7987f162SBlaise Boscaccy /* Copyright (c) 2025 Microsoft */
3*7987f162SBlaise Boscaccy #include <test_progs.h>
4*7987f162SBlaise Boscaccy #include "kfunc_call_test.skel.h"
5*7987f162SBlaise Boscaccy #include "kfunc_call_test.lskel.h"
6*7987f162SBlaise Boscaccy #include "test_kernel_flag.skel.h"
7*7987f162SBlaise Boscaccy 
8*7987f162SBlaise Boscaccy void test_kernel_flag(void)
9*7987f162SBlaise Boscaccy {
10*7987f162SBlaise Boscaccy 	struct test_kernel_flag *lsm_skel;
11*7987f162SBlaise Boscaccy 	struct kfunc_call_test *skel = NULL;
12*7987f162SBlaise Boscaccy 	struct kfunc_call_test_lskel *lskel = NULL;
13*7987f162SBlaise Boscaccy 	int ret;
14*7987f162SBlaise Boscaccy 
15*7987f162SBlaise Boscaccy 	lsm_skel = test_kernel_flag__open_and_load();
16*7987f162SBlaise Boscaccy 	if (!ASSERT_OK_PTR(lsm_skel, "lsm_skel"))
17*7987f162SBlaise Boscaccy 		return;
18*7987f162SBlaise Boscaccy 
19*7987f162SBlaise Boscaccy 	lsm_skel->bss->monitored_tid = gettid();
20*7987f162SBlaise Boscaccy 
21*7987f162SBlaise Boscaccy 	ret = test_kernel_flag__attach(lsm_skel);
22*7987f162SBlaise Boscaccy 	if (!ASSERT_OK(ret, "test_kernel_flag__attach"))
23*7987f162SBlaise Boscaccy 		goto close_prog;
24*7987f162SBlaise Boscaccy 
25*7987f162SBlaise Boscaccy 	/* Test with skel. This should pass the gatekeeper */
26*7987f162SBlaise Boscaccy 	skel = kfunc_call_test__open_and_load();
27*7987f162SBlaise Boscaccy 	if (!ASSERT_OK_PTR(skel, "skel"))
28*7987f162SBlaise Boscaccy 		goto close_prog;
29*7987f162SBlaise Boscaccy 
30*7987f162SBlaise Boscaccy 	/* Test with lskel. This should fail due to blocking kernel-based bpf() invocations */
31*7987f162SBlaise Boscaccy 	lskel = kfunc_call_test_lskel__open_and_load();
32*7987f162SBlaise Boscaccy 	if (!ASSERT_ERR_PTR(lskel, "lskel"))
33*7987f162SBlaise Boscaccy 		goto close_prog;
34*7987f162SBlaise Boscaccy 
35*7987f162SBlaise Boscaccy close_prog:
36*7987f162SBlaise Boscaccy 	if (skel)
37*7987f162SBlaise Boscaccy 		kfunc_call_test__destroy(skel);
38*7987f162SBlaise Boscaccy 	if (lskel)
39*7987f162SBlaise Boscaccy 		kfunc_call_test_lskel__destroy(lskel);
40*7987f162SBlaise Boscaccy 
41*7987f162SBlaise Boscaccy 	lsm_skel->bss->monitored_tid = 0;
42*7987f162SBlaise Boscaccy 	test_kernel_flag__destroy(lsm_skel);
43*7987f162SBlaise Boscaccy }
44