diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h index 3d4fde311f9162b71a84f995e2b055bc73dd6d1e..bfdb945eebbf7e5872e9940e9236fb994960e2f3 100644 --- a/arch/x86/include/asm/syscall_wrapper.h +++ b/arch/x86/include/asm/syscall_wrapper.h @@ -233,36 +233,75 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); * TODO: Instead of passing the array size we could pass one more arg directly * if we define a special bpf type (long array of length 1 / 2). */ #define BPF_TASK_SYS_1(name) \ - BPF_CALL_5(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64 *, arg_tail, u64, size) \ + BPF_CALL_1(bpf_task_sys##name, u64, arg1) \ { \ return __do_sys##name(arg1); \ - } + } \ + const struct bpf_func_proto bpf_task_sys##name##_proto = { \ + .func = bpf_task_sys##name, \ + .gpl_only = true, \ + .ret_type = RET_INTEGER, \ + .arg1_type = ARG_ANYTHING, \ + }; + #define BPF_TASK_SYS_2(name) \ - BPF_CALL_5(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64 *, arg_tail, u64, size) \ + BPF_CALL_2(bpf_task_sys##name, u64, arg1, u64, arg2) \ { \ return __do_sys##name(arg1, arg2); \ - } + } \ + const struct bpf_func_proto bpf_task_sys##name##_proto = { \ + .func = bpf_task_sys##name, \ + .gpl_only = true, \ + .ret_type = RET_INTEGER, \ + .arg1_type = ARG_ANYTHING, \ + .arg2_type = ARG_ANYTHING, \ + }; + #define BPF_TASK_SYS_3(name) \ - BPF_CALL_5(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64 *, arg_tail, u64, size) \ + BPF_CALL_3(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3) \ { \ return __do_sys##name(arg1, arg2, arg3); \ - } + } \ + const struct bpf_func_proto bpf_task_sys##name##_proto = { \ + .func = bpf_task_sys##name, \ + .gpl_only = true, \ + .ret_type = RET_INTEGER, \ + .arg1_type = ARG_ANYTHING, \ + .arg2_type = ARG_ANYTHING, \ + .arg3_type = ARG_ANYTHING, \ + }; + #define BPF_TASK_SYS_4(name) \ - BPF_CALL_5(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64 *, arg_tail, u64, size) \ + BPF_CALL_4(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64, arg4) \ { \ - if (size != 1 * sizeof(u64)) { \ - return -EINVAL; \ - } \ - return __do_sys##name(arg1, arg2, arg3, arg_tail[0]); \ - } + return __do_sys##name(arg1, arg2, arg3, arg4); \ + } \ + const struct bpf_func_proto bpf_task_sys##name##_proto = { \ + .func = bpf_task_sys##name, \ + .gpl_only = true, \ + .ret_type = RET_INTEGER, \ + .arg1_type = ARG_ANYTHING, \ + .arg2_type = ARG_ANYTHING, \ + .arg3_type = ARG_ANYTHING, \ + .arg4_type = ARG_ANYTHING, \ + }; + #define BPF_TASK_SYS_5(name) \ - BPF_CALL_5(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64 *, arg_tail, u64, size) \ + BPF_CALL_5(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64, arg4, u64, arg5) \ { \ - if (size != 2 * sizeof(u64)) { \ - return -EINVAL; \ - } \ - return __do_sys##name(arg1, arg2, arg3, arg_tail[0], arg_tail[1]); \ - } + return __do_sys##name(arg1, arg2, arg3, arg4, arg5); \ + } \ + const struct bpf_func_proto bpf_task_sys##name##_proto = { \ + .func = bpf_task_sys##name, \ + .gpl_only = true, \ + .ret_type = RET_INTEGER, \ + .arg1_type = ARG_ANYTHING, \ + .arg2_type = ARG_ANYTHING, \ + .arg3_type = ARG_ANYTHING, \ + .arg4_type = ARG_ANYTHING, \ + .arg5_type = ARG_ANYTHING, \ + }; + #define BPF_TASK_SYS_6(name) \ BPF_CALL_5(bpf_task_sys##name, u64, arg1, u64, arg2, u64, arg3, u64 *, arg_tail, u64, size) \ { \ @@ -270,7 +309,17 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); return -EINVAL; \ } \ return __do_sys##name(arg1, arg2, arg3, arg_tail[0], arg_tail[1], arg_tail[2]); \ - } + } \ + const struct bpf_func_proto bpf_task_sys##name##_proto = { \ + .func = bpf_task_sys##name, \ + .gpl_only = true, \ + .ret_type = RET_INTEGER, \ + .arg1_type = ARG_ANYTHING, \ + .arg2_type = ARG_ANYTHING, \ + .arg3_type = ARG_ANYTHING, \ + .arg4_type = ARG_PTR_TO_MEM_OR_NULL, \ + .arg5_type = ARG_CONST_SIZE_OR_ZERO, \ + }; \ #define __SYSCALL_DEFINEx(x, name, ...) \ static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ @@ -285,16 +334,6 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); return ret; \ } \ BPF_TASK_SYS(x, name, __VA_ARGS__) \ - const struct bpf_func_proto bpf_task_sys##name##_proto = { \ - .func = bpf_task_sys##name, \ - .gpl_only = true, \ - .ret_type = RET_INTEGER, \ - .arg1_type = ARG_ANYTHING, \ - .arg2_type = ARG_ANYTHING, \ - .arg3_type = ARG_ANYTHING, \ - .arg4_type = ARG_PTR_TO_MEM_OR_NULL, \ - .arg5_type = ARG_CONST_SIZE_OR_ZERO, \ - }; \ static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) /* @@ -308,8 +347,8 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); SYSCALL_METADATA(_##sname, 0); \ static long __do_sys_##sname(const struct pt_regs *__unused); \ __X64_SYS_STUB0(sname) \ - __IA32_SYS_STUB0(sname) \ - BPF_CALL_5(bpf_task_sys_##sname, u64, arg1, u64, arg2, u64, arg3, u64 *, arg_tail, u64, size) \ + __IA32_SYS_STUB0(sname) \ + BPF_CALL_0(bpf_task_sys_##sname) \ { \ return __do_sys_##sname(NULL); \ } \ @@ -317,11 +356,6 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); .func = bpf_task_sys_##sname, \ .gpl_only = true, \ .ret_type = RET_INTEGER, \ - .arg1_type = ARG_ANYTHING, \ - .arg2_type = ARG_ANYTHING, \ - .arg3_type = ARG_ANYTHING, \ - .arg4_type = ARG_PTR_TO_MEM_OR_NULL, \ - .arg5_type = ARG_CONST_SIZE_OR_ZERO, \ }; \ static long __do_sys_##sname(const struct pt_regs *__unused)