projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: racy notifier captures update vs traversal
[lttng-modules.git]
/
src
/
lttng-syscalls.c
diff --git
a/src/lttng-syscalls.c
b/src/lttng-syscalls.c
index c5be18051191bbb6dd0ac335389e27c469662bba..3fce0914d2d6a392f955cb724915373e4a830abc 100644
(file)
--- a/
src/lttng-syscalls.c
+++ b/
src/lttng-syscalls.c
@@
-91,7
+91,7
@@
struct timeval;
struct itimerval;
struct itimerspec;
struct itimerval;
struct itimerspec;
-#if (L
INUX_VERSION_CODE >=
KERNEL_VERSION(5,6,0))
+#if (L
TTNG_LINUX_VERSION_CODE >= LTTNG_
KERNEL_VERSION(5,6,0))
typedef __kernel_old_time_t time_t;
#endif
typedef __kernel_old_time_t time_t;
#endif
@@
-395,7
+395,7
@@
static void syscall_entry_event_unknown(struct hlist_head *unknown_action_list_h
struct lttng_event *event;
lttng_syscall_get_arguments(current, regs, args);
struct lttng_event *event;
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, unknown_action_list_head, u.syscall.node) {
+
lttng_
hlist_for_each_entry_rcu(event, unknown_action_list_head, u.syscall.node) {
if (unlikely(in_compat_syscall()))
__event_probe__compat_syscall_entry_unknown(event, id, args);
else
if (unlikely(in_compat_syscall()))
__event_probe__compat_syscall_entry_unknown(event, id, args);
else
@@
-447,7
+447,7
@@
void syscall_entry_call_func(struct hlist_head *action_list,
{
void (*fptr)(void *__data) = func;
{
void (*fptr)(void *__data) = func;
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event);
break;
}
fptr(event);
break;
}
@@
-457,7
+457,7
@@
void syscall_entry_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, args[0]);
break;
}
fptr(event, args[0]);
break;
}
@@
-469,7
+469,7
@@
void syscall_entry_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, args[0], args[1]);
break;
}
fptr(event, args[0], args[1]);
break;
}
@@
-482,7
+482,7
@@
void syscall_entry_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, args[0], args[1], args[2]);
break;
}
fptr(event, args[0], args[1], args[2]);
break;
}
@@
-496,7
+496,7
@@
void syscall_entry_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, args[0], args[1], args[2], args[3]);
break;
}
fptr(event, args[0], args[1], args[2], args[3]);
break;
}
@@
-511,7
+511,7
@@
void syscall_entry_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, args[0], args[1], args[2], args[3], args[4]);
break;
}
fptr(event, args[0], args[1], args[2], args[3], args[4]);
break;
}
@@
-527,7
+527,7
@@
void syscall_entry_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, args[0], args[1], args[2],
args[3], args[4], args[5]);
break;
fptr(event, args[0], args[1], args[2],
args[3], args[4], args[5]);
break;
@@
-755,7
+755,7
@@
static void syscall_exit_event_unknown(struct hlist_head *unknown_action_list_he
struct lttng_event *event;
lttng_syscall_get_arguments(current, regs, args);
struct lttng_event *event;
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, unknown_action_list_head, u.syscall.node) {
+
lttng_
hlist_for_each_entry_rcu(event, unknown_action_list_head, u.syscall.node) {
if (unlikely(in_compat_syscall()))
__event_probe__compat_syscall_exit_unknown(event, id, ret,
args);
if (unlikely(in_compat_syscall()))
__event_probe__compat_syscall_exit_unknown(event, id, ret,
args);
@@
-776,7
+776,7
@@
void syscall_exit_call_func(struct hlist_head *action_list,
{
void (*fptr)(void *__data, long ret) = func;
{
void (*fptr)(void *__data, long ret) = func;
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, ret);
break;
}
fptr(event, ret);
break;
}
@@
-788,7
+788,7
@@
void syscall_exit_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, ret, args[0]);
break;
}
fptr(event, ret, args[0]);
break;
}
@@
-801,7
+801,7
@@
void syscall_exit_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, ret, args[0], args[1]);
break;
}
fptr(event, ret, args[0], args[1]);
break;
}
@@
-815,7
+815,7
@@
void syscall_exit_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, ret, args[0], args[1], args[2]);
break;
}
fptr(event, ret, args[0], args[1], args[2]);
break;
}
@@
-830,7
+830,7
@@
void syscall_exit_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, ret, args[0], args[1], args[2], args[3]);
break;
}
fptr(event, ret, args[0], args[1], args[2], args[3]);
break;
}
@@
-846,7
+846,7
@@
void syscall_exit_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, ret, args[0], args[1], args[2], args[3], args[4]);
break;
}
fptr(event, ret, args[0], args[1], args[2], args[3], args[4]);
break;
}
@@
-863,7
+863,7
@@
void syscall_exit_call_func(struct hlist_head *action_list,
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
unsigned long args[LTTNG_SYSCALL_NR_ARGS];
lttng_syscall_get_arguments(current, regs, args);
- hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
+
lttng_
hlist_for_each_entry_rcu(event, action_list, u.syscall.node)
fptr(event, ret, args[0], args[1], args[2],
args[3], args[4], args[5]);
break;
fptr(event, ret, args[0], args[1], args[2],
args[3], args[4], args[5]);
break;
@@
-1935,6
+1935,9
@@
int lttng_syscall_filter_enable_event_notifier(
case LTTNG_SYSCALL_ABI_COMPAT:
dispatch_list = &group->event_notifier_compat_syscall_dispatch[syscall_id];
break;
case LTTNG_SYSCALL_ABI_COMPAT:
dispatch_list = &group->event_notifier_compat_syscall_dispatch[syscall_id];
break;
+ default:
+ ret = -EINVAL;
+ goto end;
}
break;
case LTTNG_SYSCALL_EXIT:
}
break;
case LTTNG_SYSCALL_EXIT:
@@
-1945,8
+1948,14
@@
int lttng_syscall_filter_enable_event_notifier(
case LTTNG_SYSCALL_ABI_COMPAT:
dispatch_list = &group->event_notifier_exit_compat_syscall_dispatch[syscall_id];
break;
case LTTNG_SYSCALL_ABI_COMPAT:
dispatch_list = &group->event_notifier_exit_compat_syscall_dispatch[syscall_id];
break;
+ default:
+ ret = -EINVAL;
+ goto end;
}
break;
}
break;
+ default:
+ ret = -EINVAL;
+ goto end;
}
hlist_add_head_rcu(¬ifier->u.syscall.node, dispatch_list);
}
hlist_add_head_rcu(¬ifier->u.syscall.node, dispatch_list);
This page took
0.029084 seconds
and
4
git commands to generate.