projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix block_rq_complete TP on Ubuntu kernel
[lttng-modules.git]
/
lttng-syscalls.c
diff --git
a/lttng-syscalls.c
b/lttng-syscalls.c
index 5cac721200bb8aa5cab44ffcfa281e380d7ccfe1..5501997c48fdd73f730fc59e9ac7ecd84dc6fe50 100644
(file)
--- a/
lttng-syscalls.c
+++ b/
lttng-syscalls.c
@@
-91,6
+91,7
@@
struct mmap_arg_struct;
#define PARAMS(args...) args
/* Handle unknown syscalls */
#define PARAMS(args...) args
/* Handle unknown syscalls */
+#undef TRACE_SYSTEM
#define TRACE_SYSTEM syscalls_unknown
#include "instrumentation/syscalls/headers/syscalls_unknown.h"
#undef TRACE_SYSTEM
#define TRACE_SYSTEM syscalls_unknown
#include "instrumentation/syscalls/headers/syscalls_unknown.h"
#undef TRACE_SYSTEM
@@
-374,7
+375,7
@@
void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
filter = rcu_dereference(chan->sc_filter);
if (filter) {
filter = rcu_dereference(chan->sc_filter);
if (filter) {
- if (id >= NR_compat_syscalls
+ if (id
< 0 || id
>= NR_compat_syscalls
|| !test_bit(id, filter->sc_compat)) {
/* System call filtered out. */
return;
|| !test_bit(id, filter->sc_compat)) {
/* System call filtered out. */
return;
@@
-388,7
+389,7
@@
void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
filter = rcu_dereference(chan->sc_filter);
if (filter) {
filter = rcu_dereference(chan->sc_filter);
if (filter) {
- if (id >= NR_syscalls
+ if (id
< 0 || id
>= NR_syscalls
|| !test_bit(id, filter->sc)) {
/* System call filtered out. */
return;
|| !test_bit(id, filter->sc)) {
/* System call filtered out. */
return;
@@
-398,7
+399,7
@@
void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
table_len = ARRAY_SIZE(sc_table);
unknown_event = chan->sc_unknown;
}
table_len = ARRAY_SIZE(sc_table);
unknown_event = chan->sc_unknown;
}
- if (unlikely(id >= table_len)) {
+ if (unlikely(id
< 0 || id
>= table_len)) {
syscall_entry_unknown(unknown_event, regs, id);
return;
}
syscall_entry_unknown(unknown_event, regs, id);
return;
}
@@
-502,7
+503,7
@@
void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
}
static void syscall_exit_unknown(struct lttng_event *event,
}
static void syscall_exit_unknown(struct lttng_event *event,
- struct pt_regs *regs,
unsigned
int id, long ret)
+ struct pt_regs *regs, int id, long ret)
{
unsigned long args[UNKNOWN_SYSCALL_NRARGS];
{
unsigned long args[UNKNOWN_SYSCALL_NRARGS];
@@
-528,7
+529,7
@@
void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
filter = rcu_dereference(chan->sc_filter);
if (filter) {
filter = rcu_dereference(chan->sc_filter);
if (filter) {
- if (id >= NR_compat_syscalls
+ if (id
< 0 || id
>= NR_compat_syscalls
|| !test_bit(id, filter->sc_compat)) {
/* System call filtered out. */
return;
|| !test_bit(id, filter->sc_compat)) {
/* System call filtered out. */
return;
@@
-542,7
+543,7
@@
void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
filter = rcu_dereference(chan->sc_filter);
if (filter) {
filter = rcu_dereference(chan->sc_filter);
if (filter) {
- if (id >= NR_syscalls
+ if (id
< 0 || id
>= NR_syscalls
|| !test_bit(id, filter->sc)) {
/* System call filtered out. */
return;
|| !test_bit(id, filter->sc)) {
/* System call filtered out. */
return;
@@
-552,7
+553,7
@@
void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
table_len = ARRAY_SIZE(sc_exit_table);
unknown_event = chan->sc_exit_unknown;
}
table_len = ARRAY_SIZE(sc_exit_table);
unknown_event = chan->sc_exit_unknown;
}
- if (unlikely(id >= table_len)) {
+ if (unlikely(id
< 0 || id
>= table_len)) {
syscall_exit_unknown(unknown_event, regs, id, ret);
return;
}
syscall_exit_unknown(unknown_event, regs, id, ret);
return;
}
@@
-1230,12
+1231,12
@@
long lttng_channel_syscall_mask(struct lttng_channel *channel,
for (bit = 0; bit < ARRAY_SIZE(sc_table); bit++) {
bt_bitfield_write_be(tmp_mask, char, bit, 1,
for (bit = 0; bit < ARRAY_SIZE(sc_table); bit++) {
bt_bitfield_write_be(tmp_mask, char, bit, 1,
-
test_bit(bit, filter->sc)
);
+
filter ? test_bit(bit, filter->sc) : 1
);
}
for (; bit < sc_tables_len; bit++) {
bt_bitfield_write_be(tmp_mask, char, bit, 1,
}
for (; bit < sc_tables_len; bit++) {
bt_bitfield_write_be(tmp_mask, char, bit, 1,
- test_bit(bit - ARRAY_SIZE(sc_table),
- filter->sc_compat));
+
filter ?
test_bit(bit - ARRAY_SIZE(sc_table),
+ filter->sc_compat)
: 1
);
}
if (copy_to_user(usyscall_mask->mask, tmp_mask, bitmask_len))
ret = -EFAULT;
}
if (copy_to_user(usyscall_mask->mask, tmp_mask, bitmask_len))
ret = -EFAULT;
This page took
0.026215 seconds
and
4
git commands to generate.