#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
WARN_ON_ONCE(!chan->sc_table);
if (!chan->sc_filter) {
+ if (!chan->syscall_all)
+ return -EEXIST;
filter = kzalloc(sizeof(struct lttng_syscall_filter),
GFP_KERNEL);
if (!filter)
}
if (!name) {
+ /* Fail if all syscalls are already disabled. */
+ if (bitmap_empty(filter->sc, NR_syscalls)
+ && bitmap_empty(filter->sc_compat,
+ NR_compat_syscalls)) {
+ ret = -EEXIST;
+ goto error;
+ }
+
/* Disable all system calls */
bitmap_clear(filter->sc, 0, NR_syscalls);
bitmap_clear(filter->sc_compat, 0, NR_compat_syscalls);
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,
- 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;