diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index fa6a05ba1eed..9991a41919e4 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -93,6 +93,18 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_priority_skip); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wakeup_ilocked); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_sendmsg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_recvmsg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udp_sendmsg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udp_recvmsg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udpv6_sendmsg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udpv6_recvmsg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_select_window); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_inet_sock_create); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_inet_sock_release); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rtt_estimator); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_enqueue_schedule_skb); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_build_skb_around); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_send_sig_info); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_killed_process); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start); diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h index bb88ba2a1523..28e4b31c010d 100644 --- a/include/trace/hooks/net.h +++ b/include/trace/hooks/net.h @@ -17,6 +17,8 @@ DECLARE_HOOK(android_vh_ptype_head, struct nf_conn; struct sock; struct net_device; +struct msghdr; +struct sk_buff; DECLARE_RESTRICTED_HOOK(android_rvh_nf_conn_alloc, TP_PROTO(struct nf_conn *nf_conn), TP_ARGS(nf_conn), 1); DECLARE_RESTRICTED_HOOK(android_rvh_nf_conn_free, @@ -25,6 +27,36 @@ DECLARE_RESTRICTED_HOOK(android_rvh_sk_alloc, TP_PROTO(struct sock *sock), TP_ARGS(sock), 1); DECLARE_RESTRICTED_HOOK(android_rvh_sk_free, TP_PROTO(struct sock *sock), TP_ARGS(sock), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_tcp_sendmsg, + TP_PROTO(struct sock *sk, struct msghdr *msg, size_t len), + TP_ARGS(sk, msg, len), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_tcp_recvmsg, + TP_PROTO(struct sock *sk, struct msghdr *msg, size_t len, int flags, int *addr_len), + TP_ARGS(sk, msg, len, flags, addr_len), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_udp_sendmsg, + TP_PROTO(struct sock *sk, struct msghdr *msg, size_t len), + TP_ARGS(sk, msg, len), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_udp_recvmsg, + TP_PROTO(struct sock *sk, struct msghdr *msg, size_t len, int flags, int *addr_len), + TP_ARGS(sk, msg, len, flags, addr_len), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_udpv6_sendmsg, + TP_PROTO(struct sock *sk, struct msghdr *msg, size_t len), + TP_ARGS(sk, msg, len), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_udpv6_recvmsg, + TP_PROTO(struct sock *sk, struct msghdr *msg, size_t len, int flags, int *addr_len), + TP_ARGS(sk, msg, len, flags, addr_len), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_tcp_select_window, + TP_PROTO(struct sock *sk, u32 *new_win), TP_ARGS(sk, new_win), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_inet_sock_create, + TP_PROTO(struct sock *sk), TP_ARGS(sk), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_inet_sock_release, + TP_PROTO(struct sock *sk), TP_ARGS(sk), 1); +DECLARE_HOOK(android_vh_tcp_rtt_estimator, + TP_PROTO(struct sock *sk, long mrtt_us), TP_ARGS(sk, mrtt_us)); +DECLARE_HOOK(android_vh_udp_enqueue_schedule_skb, + TP_PROTO(struct sock *sk, struct sk_buff *skb), TP_ARGS(sk, skb)); +DECLARE_HOOK(android_vh_build_skb_around, + TP_PROTO(struct sk_buff *skb), TP_ARGS(skb)); struct poll_table_struct; typedef struct poll_table_struct poll_table; diff --git a/net/core/skbuff.c b/net/core/skbuff.c index d8a3ada886ff..6e244657835d 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -80,6 +80,8 @@ #include #include +#include + #include "dev.h" #include "sock_destructor.h" @@ -294,6 +296,7 @@ static void __build_skb_around(struct sk_buff *skb, void *data, atomic_set(&shinfo->dataref, 1); skb_set_kcov_handle(skb, kcov_common_handle()); + trace_android_vh_build_skb_around(skb); } /** diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 223b2b4430aa..68aabbdcbbf7 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -120,6 +120,7 @@ #include #include +#include /* The inetsw table contains everything that inet_create needs to * build a new socket. @@ -386,6 +387,9 @@ lookup_protocol: if (err) goto out_sk_release; } + + trace_android_rvh_inet_sock_create(sk); + out: return err; out_rcu_unlock: @@ -413,6 +417,8 @@ int inet_release(struct socket *sock) if (!sk->sk_kern_sock) BPF_CGROUP_RUN_PROG_INET_SOCK_RELEASE(sk); + trace_android_rvh_inet_sock_release(sk); + /* Applications forget to leave groups before exiting */ ip_mc_drop_socket(sk); diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 3b81f6df829f..2461b694c7ba 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -80,6 +80,7 @@ #include #include #include +#include int sysctl_tcp_max_orphans __read_mostly = NR_FILE; @@ -843,6 +844,8 @@ static void tcp_rtt_estimator(struct sock *sk, long mrtt_us) long m = mrtt_us; /* RTT */ u32 srtt = tp->srtt_us; + trace_android_vh_tcp_rtt_estimator(sk, mrtt_us); + /* The following amusing code comes from Jacobson's * article in SIGCOMM '88. Note that rtt and mdev * are scaled versions of rtt and mean deviation. diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 40aa34492156..733b318ed2ca 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -46,6 +46,7 @@ #include #include +#include /* Refresh clocks of a TCP socket, * ensuring monotically increasing values. @@ -277,6 +278,8 @@ static u16 tcp_select_window(struct sock *sk) tp->rcv_wnd = new_win; tp->rcv_wup = tp->rcv_nxt; + trace_android_rvh_tcp_select_window(sk, &new_win); + /* Make sure we do not exceed the maximum possible * scaled window. */ diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 31adbc8e8fe9..d8ca35178245 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -116,6 +116,7 @@ #if IS_ENABLED(CONFIG_IPV6) #include #endif +#include struct udp_table udp_table __read_mostly; EXPORT_SYMBOL(udp_table); @@ -1513,6 +1514,8 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb) spinlock_t *busy = NULL; int size; + trace_android_vh_udp_enqueue_schedule_skb(sk, skb); + /* try to avoid the costly atomic add/sub pair when the receive * queue is full; always allow at least a packet */ diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 92910ecdaf39..46cb8890971f 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -68,6 +68,8 @@ #include #include +#include + #include "ip6_offload.h" MODULE_AUTHOR("Cast of dozens"); @@ -274,6 +276,9 @@ lookup_protocol: if (err) goto out_sk_release; } + + trace_android_rvh_inet_sock_create(sk); + out: return err; out_rcu_unlock: