diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index c3465bfc1c61..0c147c8f62a3 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -287,6 +287,12 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp6_unicast_rcv_skb); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_established_fast_path); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_established_slow_path); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_rtt_update); +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_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 3ee45480d2ab..27bfc0e5f5ea 100644 --- a/include/trace/hooks/net.h +++ b/include/trace/hooks/net.h @@ -93,6 +93,26 @@ DECLARE_HOOK(android_vh_dc_receive, TP_PROTO(struct sk_buff *skb, int *flag), TP_ARGS(skb, flag)); DECLARE_HOOK(android_vh_tcp_rcv_rtt_update, TP_PROTO(struct tcp_sock *tp, u32 sample, int win_dep), TP_ARGS(tp, sample, win_dep)); +struct msghdr; +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); + /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_NET_VH_H */ diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 8d9e47a16f32..9792e82e5549 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1356,6 +1356,7 @@ int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) { int ret; + trace_android_rvh_tcp_sendmsg(sk, msg, size); lock_sock(sk); ret = tcp_sendmsg_locked(sk, msg, size); release_sock(sk); @@ -2877,6 +2878,9 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, sizeof(msg->msg_inq), &msg->msg_inq); } } + + trace_android_rvh_tcp_recvmsg(sk, msg, len, flags, addr_len); + return ret; } EXPORT_SYMBOL(tcp_recvmsg); diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 2b85c1293963..9a0e99e8a509 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) struct ip_options_data opt_copy; int uc_index; + trace_android_rvh_udp_sendmsg(sk, msg, len); + if (len > 0xFFFF) return -EMSGSIZE; @@ -1958,6 +1960,8 @@ try_again: if (flags & MSG_TRUNC) err = ulen; + trace_android_rvh_udp_recvmsg(sk, msg, len, flags, addr_len); + skb_consume_udp(sk, skb, peeking ? -err : err); return err; diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 06a8dc059efc..6e8efb688dda 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -494,6 +494,8 @@ try_again: if (flags & MSG_TRUNC) err = ulen; + trace_android_rvh_udpv6_recvmsg(sk, msg, len, flags, addr_len); + skb_consume_udp(sk, skb, peeking ? -err : err); return err; @@ -1401,6 +1403,8 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) int is_udplite = IS_UDPLITE(sk); int (*getfrag)(void *, char *, int, int, int, struct sk_buff *); + trace_android_rvh_udpv6_sendmsg(sk, msg, len); + ipcm6_init(&ipc6); ipc6.gso_size = READ_ONCE(up->gso_size); ipc6.sockc.tsflags = READ_ONCE(sk->sk_tsflags);