mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-18 00:24:58 +08:00
perf trace augmented_syscalls: Add augmented_sockaddr_syscall_enter()
From the one for 'connect', so that we can use it with sendto and others that receive a 'struct sockaddr'. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: https://lkml.kernel.org/n/tip-8bdqv1q0ndcjl1nqns5r5je2@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d5a7e6613b
commit
24a6c2cd1d
@ -95,6 +95,31 @@ struct syscall_enter_newstat_args {
|
|||||||
|
|
||||||
augmented_filename_syscall_enter(newstat);
|
augmented_filename_syscall_enter(newstat);
|
||||||
|
|
||||||
|
#ifndef _K_SS_MAXSIZE
|
||||||
|
#define _K_SS_MAXSIZE 128
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define augmented_sockaddr_syscall_enter(syscall) \
|
||||||
|
struct augmented_enter_##syscall##_args { \
|
||||||
|
struct syscall_enter_##syscall##_args args; \
|
||||||
|
struct sockaddr_storage addr; \
|
||||||
|
}; \
|
||||||
|
int syscall_enter(syscall)(struct syscall_enter_##syscall##_args *args) \
|
||||||
|
{ \
|
||||||
|
struct augmented_enter_##syscall##_args augmented_args; \
|
||||||
|
unsigned long addrlen = sizeof(augmented_args.addr); \
|
||||||
|
probe_read(&augmented_args.args, sizeof(augmented_args.args), args); \
|
||||||
|
/* FIXME_CLANG_OPTIMIZATION_THAT_ACCESSES_USER_CONTROLLED_ADDRLEN_DESPITE_THIS_CHECK */ \
|
||||||
|
/* if (addrlen > augmented_args.args.addrlen) */ \
|
||||||
|
/* addrlen = augmented_args.args.addrlen; */ \
|
||||||
|
/* */ \
|
||||||
|
probe_read(&augmented_args.addr, addrlen, args->addr_ptr); \
|
||||||
|
perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, \
|
||||||
|
&augmented_args, \
|
||||||
|
sizeof(augmented_args) - sizeof(augmented_args.addr) + addrlen); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
struct sockaddr;
|
struct sockaddr;
|
||||||
|
|
||||||
struct syscall_enter_connect_args {
|
struct syscall_enter_connect_args {
|
||||||
@ -105,25 +130,6 @@ struct syscall_enter_connect_args {
|
|||||||
unsigned long addrlen;
|
unsigned long addrlen;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct augmented_enter_connect_args {
|
augmented_sockaddr_syscall_enter(connect);
|
||||||
struct syscall_enter_connect_args args;
|
|
||||||
struct sockaddr_storage addr;
|
|
||||||
};
|
|
||||||
|
|
||||||
int syscall_enter(connect)(struct syscall_enter_connect_args *args)
|
|
||||||
{
|
|
||||||
struct augmented_enter_connect_args augmented_args;
|
|
||||||
unsigned long addrlen = sizeof(augmented_args.addr);
|
|
||||||
|
|
||||||
probe_read(&augmented_args.args, sizeof(augmented_args.args), args);
|
|
||||||
#ifdef FIXME_CLANG_OPTIMIZATION_THAT_ACCESSES_USER_CONTROLLED_ADDRLEN_DESPITE_THIS_CHECK
|
|
||||||
if (addrlen > augmented_args.args.addrlen)
|
|
||||||
addrlen = augmented_args.args.addrlen;
|
|
||||||
#endif
|
|
||||||
probe_read(&augmented_args.addr, addrlen, args->addr_ptr);
|
|
||||||
perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, &augmented_args,
|
|
||||||
sizeof(augmented_args) - sizeof(augmented_args.addr) + addrlen);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
license(GPL);
|
license(GPL);
|
||||||
|
Loading…
Reference in New Issue
Block a user