Skip to content
Snippets Groups Projects
Commit 3d385605 authored by Luis Gerhorst's avatar Luis Gerhorst
Browse files

syscall_wrapper/BPF_CALL: only take used arguments

parent ca73d13b
No related branches found
No related tags found
No related merge requests found
...@@ -233,36 +233,75 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); ...@@ -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 * 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). */ * if we define a special bpf type (long array of length 1 / 2). */
#define BPF_TASK_SYS_1(name) \ #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); \ 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) \ #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); \ 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) \ #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); \ 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) \ #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 __do_sys##name(arg1, arg2, arg3, arg4); \
return -EINVAL; \
} \ } \
return __do_sys##name(arg1, arg2, arg3, arg_tail[0]); \ 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) \ #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 __do_sys##name(arg1, arg2, arg3, arg4, arg5); \
return -EINVAL; \
} \ } \
return __do_sys##name(arg1, arg2, arg3, arg_tail[0], arg_tail[1]); \ 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) \ #define BPF_TASK_SYS_6(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 *, arg_tail, u64, size) \
{ \ { \
...@@ -270,7 +309,17 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); ...@@ -270,7 +309,17 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
return -EINVAL; \ return -EINVAL; \
} \ } \
return __do_sys##name(arg1, arg2, arg3, arg_tail[0], arg_tail[1], arg_tail[2]); \ 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, ...) \ #define __SYSCALL_DEFINEx(x, name, ...) \
static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ 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); ...@@ -285,16 +334,6 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
return ret; \ return ret; \
} \ } \
BPF_TASK_SYS(x, name, __VA_ARGS__) \ 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__)) static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
/* /*
...@@ -309,7 +348,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); ...@@ -309,7 +348,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
static long __do_sys_##sname(const struct pt_regs *__unused); \ static long __do_sys_##sname(const struct pt_regs *__unused); \
__X64_SYS_STUB0(sname) \ __X64_SYS_STUB0(sname) \
__IA32_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) \ BPF_CALL_0(bpf_task_sys_##sname) \
{ \ { \
return __do_sys_##sname(NULL); \ return __do_sys_##sname(NULL); \
} \ } \
...@@ -317,11 +356,6 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); ...@@ -317,11 +356,6 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
.func = bpf_task_sys_##sname, \ .func = bpf_task_sys_##sname, \
.gpl_only = true, \ .gpl_only = true, \
.ret_type = RET_INTEGER, \ .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) static long __do_sys_##sname(const struct pt_regs *__unused)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment