X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-syscalls.c;h=edb69b09bc23c79d133a72209eedb95fb672b033;hb=5760f3f4e64af16249a4f208e680c7dcffb4f990;hp=7a2d02a9ef1ff6c8d4e41ea39c62918c3c2a77e7;hpb=2d9cd7f33b37382e41eab3cfb509b24af3462887;p=lttng-modules.git diff --git a/lttng-syscalls.c b/lttng-syscalls.c index 7a2d02a9..edb69b09 100644 --- a/lttng-syscalls.c +++ b/lttng-syscalls.c @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) * * lttng-syscalls.c * @@ -18,15 +18,15 @@ #include #include #include +#include #include #include #include -#include -#include -#include -#include #include +#include "lttng-tracepoint.h" + +#define LTTNG_SYSCALL_NR_ARGS 6 #ifndef CONFIG_COMPAT # ifndef is_compat_task @@ -73,6 +73,16 @@ struct mmap_arg_struct; struct file_handle; struct user_msghdr; +/* + * Forward declaration for kernels >= 5.6 + */ +struct timex; +struct timeval; +struct itimerval; +struct itimerspec; + +typedef __kernel_old_time_t time_t; + #ifdef IA32_NR_syscalls #define NR_compat_syscalls IA32_NR_syscalls #else @@ -364,7 +374,7 @@ static void syscall_entry_unknown(struct lttng_event *event, { unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); if (unlikely(in_compat_syscall())) __event_probe__compat_syscall_entry_unknown(event, id, args); else @@ -435,7 +445,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) void (*fptr)(void *__data, unsigned long arg0) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, args[0]); break; } @@ -446,7 +456,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) unsigned long arg1) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, args[0], args[1]); break; } @@ -458,7 +468,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) unsigned long arg2) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, args[0], args[1], args[2]); break; } @@ -471,7 +481,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) unsigned long arg3) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, args[0], args[1], args[2], args[3]); break; } @@ -485,7 +495,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) unsigned long arg4) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, args[0], args[1], args[2], args[3], args[4]); break; } @@ -500,7 +510,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) unsigned long arg5) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, args[0], args[1], args[2], args[3], args[4], args[5]); break; @@ -515,7 +525,7 @@ static void syscall_exit_unknown(struct lttng_event *event, { unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); if (unlikely(in_compat_syscall())) __event_probe__compat_syscall_exit_unknown(event, id, ret, args); @@ -591,7 +601,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) unsigned long arg0) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, ret, args[0]); break; } @@ -603,7 +613,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) unsigned long arg1) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, ret, args[0], args[1]); break; } @@ -616,7 +626,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) unsigned long arg2) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, ret, args[0], args[1], args[2]); break; } @@ -630,7 +640,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) unsigned long arg3) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, ret, args[0], args[1], args[2], args[3]); break; } @@ -645,7 +655,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) unsigned long arg4) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, ret, args[0], args[1], args[2], args[3], args[4]); break; } @@ -661,7 +671,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) unsigned long arg5) = entry->func; unsigned long args[LTTNG_SYSCALL_NR_ARGS]; - lttng_syscall_get_arguments(current, regs, args); + syscall_get_arguments(current, regs, args); fptr(event, ret, args[0], args[1], args[2], args[3], args[4], args[5]); break; @@ -748,8 +758,6 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter) struct lttng_kernel_event ev; int ret; - wrapper_vmalloc_sync_all(); - if (!chan->sc_table) { /* create syscall table mapping syscall to events */ chan->sc_table = kzalloc(sizeof(struct lttng_event *) @@ -872,7 +880,7 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter) return ret; #endif if (!chan->sys_enter_registered) { - ret = lttng_wrapper_tracepoint_probe_register("sys_enter", + ret = lttng_tracepoint_probe_register("sys_enter", (void *) syscall_entry_probe, chan); if (ret) return ret; @@ -883,10 +891,10 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter) * conflict with sys_exit syscall entry. */ if (!chan->sys_exit_registered) { - ret = lttng_wrapper_tracepoint_probe_register("sys_exit", + ret = lttng_tracepoint_probe_register("sys_exit", (void *) syscall_exit_probe, chan); if (ret) { - WARN_ON_ONCE(lttng_wrapper_tracepoint_probe_unregister("sys_enter", + WARN_ON_ONCE(lttng_tracepoint_probe_unregister("sys_enter", (void *) syscall_entry_probe, chan)); return ret; } @@ -905,14 +913,14 @@ int lttng_syscalls_unregister(struct lttng_channel *chan) if (!chan->sc_table) return 0; if (chan->sys_enter_registered) { - ret = lttng_wrapper_tracepoint_probe_unregister("sys_enter", + ret = lttng_tracepoint_probe_unregister("sys_enter", (void *) syscall_entry_probe, chan); if (ret) return ret; chan->sys_enter_registered = 0; } if (chan->sys_exit_registered) { - ret = lttng_wrapper_tracepoint_probe_unregister("sys_exit", + ret = lttng_tracepoint_probe_unregister("sys_exit", (void *) syscall_exit_probe, chan); if (ret) return ret; @@ -1284,7 +1292,7 @@ int lttng_abi_syscall_list(void) struct file *syscall_list_file; int file_fd, ret; - file_fd = lttng_get_unused_fd(); + file_fd = get_unused_fd_flags(0); if (file_fd < 0) { ret = file_fd; goto fd_error;