diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index b01b9dd0bf1e..32532f56706c 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -231,6 +231,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sp_pc_abort); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dma_buf_stats_teardown); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_finish); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_v4_connect); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_v6_connect); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_v4_connect); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_v6_connect); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_irq_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_irq_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_wq_wait_start); diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h index edd1c7fc2729..bfcd700b97bf 100644 --- a/include/trace/hooks/net.h +++ b/include/trace/hooks/net.h @@ -15,6 +15,16 @@ DECLARE_HOOK(android_vh_ptype_head, TP_ARGS(pt, vendor_pt)); struct sock; +struct sockaddr_in6; +DECLARE_HOOK(android_vh_tcp_v4_connect, + TP_PROTO(struct sock *sk, struct sockaddr *uaddr), TP_ARGS(sk, uaddr)); +DECLARE_HOOK(android_vh_tcp_v6_connect, + TP_PROTO(struct sock *sk, struct sockaddr *uaddr), TP_ARGS(sk, uaddr)); +DECLARE_HOOK(android_vh_udp_v4_connect, + TP_PROTO(struct sock *sk, __be32 daddr, __be16 dport, uint16_t family), + TP_ARGS(sk, daddr, dport, family)); +DECLARE_HOOK(android_vh_udp_v6_connect, + TP_PROTO(struct sock *sk, struct sockaddr_in6 *sin6), TP_ARGS(sk, sin6)); DECLARE_HOOK(android_vh_tcp_write_timeout_estab_retrans, TP_PROTO(struct sock *sk), TP_ARGS(sk)); DECLARE_HOOK(android_vh_tcp_connect, diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index bcc2f1e090c7..e98e44b666fe 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -85,6 +85,7 @@ #include #include +#include #ifdef CONFIG_TCP_MD5SIG static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key, @@ -235,6 +236,8 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) if (usin->sin_family != AF_INET) return -EAFNOSUPPORT; + trace_android_vh_tcp_v4_connect(sk, uaddr); + nexthop = daddr = usin->sin_addr.s_addr; inet_opt = rcu_dereference_protected(inet->inet_opt, lockdep_sock_is_held(sk)); diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 78d6f8169e05..2d5d32a3ada8 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1135,6 +1135,8 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) connected = 1; } + trace_android_vh_udp_v4_connect(sk, daddr, dport, AF_INET); + ipcm_init_sk(&ipc, inet); ipc.gso_size = READ_ONCE(up->gso_size); diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 59173f58ce99..dddc1cabe375 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -69,6 +69,7 @@ #include #include +#include static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb, enum sk_rst_reason reason); @@ -256,6 +257,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, return err; } + trace_android_vh_tcp_v6_connect(sk, uaddr); + if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr)) saddr = &sk->sk_v6_rcv_saddr; diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 12bb1e40dd04..897568c6239b 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -1472,6 +1472,8 @@ do_udp_sendmsg: connected = true; } + trace_android_vh_udp_v6_connect(sk, sin6); + if (!fl6->flowi6_oif) fl6->flowi6_oif = READ_ONCE(sk->sk_bound_dev_if);