1*fb66223aSBenjamin Tissoires // SPDX-License-Identifier: GPL-2.0
2*fb66223aSBenjamin Tissoires /* Copyright (c) 2021 Facebook */
3*fb66223aSBenjamin Tissoires #include <vmlinux.h>
4*fb66223aSBenjamin Tissoires #include <bpf/bpf_helpers.h>
5*fb66223aSBenjamin Tissoires 
6*fb66223aSBenjamin Tissoires extern void bpf_kfunc_call_test_mem_len_pass1(void *mem, int len) __ksym;
7*fb66223aSBenjamin Tissoires 
8*fb66223aSBenjamin Tissoires struct syscall_test_args {
9*fb66223aSBenjamin Tissoires 	__u8 data[16];
10*fb66223aSBenjamin Tissoires 	size_t size;
11*fb66223aSBenjamin Tissoires };
12*fb66223aSBenjamin Tissoires 
13*fb66223aSBenjamin Tissoires SEC("?syscall")
14*fb66223aSBenjamin Tissoires int kfunc_syscall_test_fail(struct syscall_test_args *args)
15*fb66223aSBenjamin Tissoires {
16*fb66223aSBenjamin Tissoires 	bpf_kfunc_call_test_mem_len_pass1(&args->data, sizeof(*args) + 1);
17*fb66223aSBenjamin Tissoires 
18*fb66223aSBenjamin Tissoires 	return 0;
19*fb66223aSBenjamin Tissoires }
20*fb66223aSBenjamin Tissoires 
21*fb66223aSBenjamin Tissoires SEC("?syscall")
22*fb66223aSBenjamin Tissoires int kfunc_syscall_test_null_fail(struct syscall_test_args *args)
23*fb66223aSBenjamin Tissoires {
24*fb66223aSBenjamin Tissoires 	/* Must be called with args as a NULL pointer
25*fb66223aSBenjamin Tissoires 	 * we do not check for it to have the verifier consider that
26*fb66223aSBenjamin Tissoires 	 * the pointer might not be null, and so we can load it.
27*fb66223aSBenjamin Tissoires 	 *
28*fb66223aSBenjamin Tissoires 	 * So the following can not be added:
29*fb66223aSBenjamin Tissoires 	 *
30*fb66223aSBenjamin Tissoires 	 * if (args)
31*fb66223aSBenjamin Tissoires 	 *      return -22;
32*fb66223aSBenjamin Tissoires 	 */
33*fb66223aSBenjamin Tissoires 
34*fb66223aSBenjamin Tissoires 	bpf_kfunc_call_test_mem_len_pass1(args, sizeof(*args));
35*fb66223aSBenjamin Tissoires 
36*fb66223aSBenjamin Tissoires 	return 0;
37*fb66223aSBenjamin Tissoires }
38*fb66223aSBenjamin Tissoires 
39*fb66223aSBenjamin Tissoires char _license[] SEC("license") = "GPL";
40