perf augmented_raw_syscalls: Rename augmented_filename to augmented_arg
Because it is not used only for strings, we already use it for sockaddr structs and will use it for all other types. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Link: https://lkml.kernel.org/n/tip-w9nkt3tvmyn5i4qnwng3ap1k@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
b92675f4a9
Коммит
2ad926db78
|
@ -60,7 +60,7 @@ struct syscall_exit_args {
|
||||||
long ret;
|
long ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct augmented_filename {
|
struct augmented_arg {
|
||||||
unsigned int size;
|
unsigned int size;
|
||||||
int err;
|
int err;
|
||||||
char value[PATH_MAX];
|
char value[PATH_MAX];
|
||||||
|
@ -72,8 +72,7 @@ struct augmented_args_payload {
|
||||||
struct syscall_enter_args args;
|
struct syscall_enter_args args;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
struct augmented_filename filename,
|
struct augmented_arg arg, arg2;
|
||||||
filename2;
|
|
||||||
};
|
};
|
||||||
struct sockaddr_storage saddr;
|
struct sockaddr_storage saddr;
|
||||||
};
|
};
|
||||||
|
@ -82,31 +81,30 @@ struct augmented_args_payload {
|
||||||
bpf_map(augmented_args_tmp, PERCPU_ARRAY, int, struct augmented_args_payload, 1);
|
bpf_map(augmented_args_tmp, PERCPU_ARRAY, int, struct augmented_args_payload, 1);
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
unsigned int augmented_filename__read(struct augmented_filename *augmented_filename,
|
unsigned int augmented_arg__read_str(struct augmented_arg *augmented_arg, const void *arg, unsigned int arg_len)
|
||||||
const void *filename_arg, unsigned int filename_len)
|
|
||||||
{
|
{
|
||||||
unsigned int len = sizeof(*augmented_filename);
|
unsigned int augmented_len = sizeof(*augmented_arg);
|
||||||
int size = probe_read_str(&augmented_filename->value, filename_len, filename_arg);
|
int string_len = probe_read_str(&augmented_arg->value, arg_len, arg);
|
||||||
|
|
||||||
augmented_filename->size = augmented_filename->err = 0;
|
augmented_arg->size = augmented_arg->err = 0;
|
||||||
/*
|
/*
|
||||||
* probe_read_str may return < 0, e.g. -EFAULT
|
* probe_read_str may return < 0, e.g. -EFAULT
|
||||||
* So we leave that in the augmented_filename->size that userspace will
|
* So we leave that in the augmented_arg->size that userspace will
|
||||||
*/
|
*/
|
||||||
if (size > 0) {
|
if (string_len > 0) {
|
||||||
len -= sizeof(augmented_filename->value) - size;
|
augmented_len -= sizeof(augmented_arg->value) - string_len;
|
||||||
len &= sizeof(augmented_filename->value) - 1;
|
augmented_len &= sizeof(augmented_arg->value) - 1;
|
||||||
augmented_filename->size = size;
|
augmented_arg->size = string_len;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* So that username notice the error while still being able
|
* So that username notice the error while still being able
|
||||||
* to skip this augmented arg record
|
* to skip this augmented arg record
|
||||||
*/
|
*/
|
||||||
augmented_filename->err = size;
|
augmented_arg->err = string_len;
|
||||||
len = offsetof(struct augmented_filename, value);
|
augmented_len = offsetof(struct augmented_arg, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return augmented_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
SEC("!raw_syscalls:unaugmented")
|
SEC("!raw_syscalls:unaugmented")
|
||||||
|
@ -174,7 +172,7 @@ int sys_enter_open(struct syscall_enter_args *args)
|
||||||
if (augmented_args == NULL)
|
if (augmented_args == NULL)
|
||||||
return 1; /* Failure: don't filter */
|
return 1; /* Failure: don't filter */
|
||||||
|
|
||||||
len += augmented_filename__read(&augmented_args->filename, filename_arg, sizeof(augmented_args->filename.value));
|
len += augmented_arg__read_str(&augmented_args->arg, filename_arg, sizeof(augmented_args->arg.value));
|
||||||
|
|
||||||
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
||||||
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
||||||
|
@ -191,7 +189,7 @@ int sys_enter_openat(struct syscall_enter_args *args)
|
||||||
if (augmented_args == NULL)
|
if (augmented_args == NULL)
|
||||||
return 1; /* Failure: don't filter */
|
return 1; /* Failure: don't filter */
|
||||||
|
|
||||||
len += augmented_filename__read(&augmented_args->filename, filename_arg, sizeof(augmented_args->filename.value));
|
len += augmented_arg__read_str(&augmented_args->arg, filename_arg, sizeof(augmented_args->arg.value));
|
||||||
|
|
||||||
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
||||||
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
||||||
|
@ -209,8 +207,8 @@ int sys_enter_rename(struct syscall_enter_args *args)
|
||||||
if (augmented_args == NULL)
|
if (augmented_args == NULL)
|
||||||
return 1; /* Failure: don't filter */
|
return 1; /* Failure: don't filter */
|
||||||
|
|
||||||
oldpath_len = augmented_filename__read(&augmented_args->filename, oldpath_arg, sizeof(augmented_args->filename.value));
|
oldpath_len = augmented_arg__read_str(&augmented_args->arg, oldpath_arg, sizeof(augmented_args->arg.value));
|
||||||
len += oldpath_len + augmented_filename__read((void *)(&augmented_args->filename) + oldpath_len, newpath_arg, sizeof(augmented_args->filename.value));
|
len += oldpath_len + augmented_arg__read_str((void *)(&augmented_args->arg) + oldpath_len, newpath_arg, sizeof(augmented_args->arg.value));
|
||||||
|
|
||||||
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
||||||
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
||||||
|
@ -228,8 +226,8 @@ int sys_enter_renameat(struct syscall_enter_args *args)
|
||||||
if (augmented_args == NULL)
|
if (augmented_args == NULL)
|
||||||
return 1; /* Failure: don't filter */
|
return 1; /* Failure: don't filter */
|
||||||
|
|
||||||
oldpath_len = augmented_filename__read(&augmented_args->filename, oldpath_arg, sizeof(augmented_args->filename.value));
|
oldpath_len = augmented_arg__read_str(&augmented_args->arg, oldpath_arg, sizeof(augmented_args->arg.value));
|
||||||
len += oldpath_len + augmented_filename__read((void *)(&augmented_args->filename) + oldpath_len, newpath_arg, sizeof(augmented_args->filename.value));
|
len += oldpath_len + augmented_arg__read_str((void *)(&augmented_args->arg) + oldpath_len, newpath_arg, sizeof(augmented_args->arg.value));
|
||||||
|
|
||||||
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
/* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
|
||||||
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче