diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 0c147c8f62a3..28a90672f028 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -293,6 +293,12 @@ 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_should_memcg_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_capacity_show); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init); diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h index 27bfc0e5f5ea..979bb9a9b627 100644 --- a/include/trace/hooks/net.h +++ b/include/trace/hooks/net.h @@ -112,6 +112,19 @@ DECLARE_RESTRICTED_HOOK(android_rvh_udpv6_sendmsg, 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); +struct sk_buff; +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)); /* macro versions of hooks are no longer required */ diff --git a/net/core/skbuff.c b/net/core/skbuff.c index f220306731da..67e0a5197ab8 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -88,6 +88,8 @@ #include #include +#include + #include "dev.h" #include "netmem_priv.h" #include "sock_destructor.h" @@ -432,6 +434,8 @@ struct sk_buff *slab_build_skb(void *data) data = __slab_build_skb(skb, data, &size); __finalize_skb_around(skb, data, size); + trace_android_vh_build_skb_around(skb); + return skb; } EXPORT_SYMBOL(slab_build_skb); @@ -449,6 +453,8 @@ static void __build_skb_around(struct sk_buff *skb, void *data, data = __slab_build_skb(skb, data, &size); __finalize_skb_around(skb, data, size); + + trace_android_vh_build_skb_around(skb); } /** diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 32744e7cf87d..fbf366b240e2 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -392,6 +392,9 @@ lookup_protocol: if (err) goto out_sk_release; } + + trace_android_rvh_inet_sock_create(sk); + out: trace_android_vh_inet_create(sk, err); return err; @@ -420,6 +423,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 0a4bc922f0ca..65b35868ac7e 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -881,6 +881,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 68b62b565eb5..d683ff9d432d 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -299,6 +299,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 9a0e99e8a509..f1eae6becd56 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1581,6 +1581,8 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb) spinlock_t *busy = NULL; int size, rcvbuf; + trace_android_vh_udp_enqueue_schedule_skb(sk, skb); + /* Immediately drop when the receive queue is full. * Always allow at least one packet. */ diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index bcb21ba6205f..33a8637756df 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -70,6 +70,8 @@ #include #include +#include + #include "ip6_offload.h" MODULE_AUTHOR("Cast of dozens"); @@ -267,6 +269,9 @@ lookup_protocol: if (err) goto out_sk_release; } + + trace_android_rvh_inet_sock_create(sk); + out: trace_android_vh_inet_create(sk, err); return err;