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