diff options
Diffstat (limited to 'tools/testing/selftests/bpf/test_verifier.c')
| -rw-r--r-- | tools/testing/selftests/bpf/test_verifier.c | 19 | 
1 files changed, 18 insertions, 1 deletions
diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index 78a6bae56ea6..9be395d9dc64 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c @@ -114,6 +114,7 @@ struct bpf_test {  		bpf_testdata_struct_t retvals[MAX_TEST_RUNS];  	};  	enum bpf_attach_type expected_attach_type; +	const char *kfunc;  };  /* Note we want this to be 64 bit aligned so that the end of our array is @@ -984,8 +985,24 @@ static void do_test_single(struct bpf_test *test, bool unpriv,  		attr.log_level = 4;  	attr.prog_flags = pflags; +	if (prog_type == BPF_PROG_TYPE_TRACING && test->kfunc) { +		attr.attach_btf_id = libbpf_find_vmlinux_btf_id(test->kfunc, +						attr.expected_attach_type); +		if (attr.attach_btf_id < 0) { +			printf("FAIL\nFailed to find BTF ID for '%s'!\n", +				test->kfunc); +			(*errors)++; +			return; +		} +	} +  	fd_prog = bpf_load_program_xattr(&attr, bpf_vlog, sizeof(bpf_vlog)); -	if (fd_prog < 0 && !bpf_probe_prog_type(prog_type, 0)) { + +	/* BPF_PROG_TYPE_TRACING requires more setup and +	 * bpf_probe_prog_type won't give correct answer +	 */ +	if (fd_prog < 0 && prog_type != BPF_PROG_TYPE_TRACING && +	    !bpf_probe_prog_type(prog_type, 0)) {  		printf("SKIP (unsupported program type %d)\n", prog_type);  		skips++;  		goto close_fds;  | 
