Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d88b2969 authored by Bae Soukjin's avatar Bae Soukjin Committed by Todd Kjos
Browse files

ANDROID: vendor_hooks: Add vendor hook to the net



  android_vh_ptype_head:
    To add a debugging chain to ptype list

  android_vh_kfree_skb
    To sniff the dropped packet at kernel network

Bug: 163716381

Signed-off-by: default avatarBae Soukjin <soukjin.bae@samsung.com>
Change-Id: Ide80bf0a129da31a1824d4a33026ac42be327361
parent cc148951
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#define CREATE_TRACE_POINTS
#include <trace/hooks/vendor_hooks.h>
#include <trace/hooks/dtask.h>
#include <trace/hooks/net.h>

/*
 * Export tracepoints that act as a bare tracehook (ie: have no trace event
@@ -21,4 +22,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb);
+27 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM net
#define TRACE_INCLUDE_PATH trace/hooks

#if !defined(_TRACE_HOOK_NET_VH_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_NET_VH_H
#include <linux/tracepoint.h>
#include <trace/hooks/vendor_hooks.h>

#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
struct packet_type;
struct list_head;
struct sk_buff;
DECLARE_HOOK(android_vh_ptype_head,
	TP_PROTO(const struct packet_type *pt, struct list_head *vendor_pt),
	TP_ARGS(pt, vendor_pt));
DECLARE_HOOK(android_vh_kfree_skb,
	TP_PROTO(struct sk_buff *skb), TP_ARGS(skb));
#else
#define trace_android_vh_ptype_head(pt, vendor_pt)
#define trace_android_vh_kfree_skb(skb)
#endif
#endif /* _TRACE_HOOK_NET_VH_H */
/* This part must be outside protection */
#include <trace/define_trace.h>
+7 −0
Original line number Diff line number Diff line
@@ -143,6 +143,7 @@
#include <linux/net_namespace.h>
#include <linux/indirect_call_wrapper.h>
#include <net/devlink.h>
#include <trace/hooks/net.h>

#include "net-sysfs.h"

@@ -302,6 +303,12 @@ EXPORT_PER_CPU_SYMBOL(softnet_data);

static inline struct list_head *ptype_head(const struct packet_type *pt)
{
	struct list_head vendor_pt = { .next  = NULL, };

	trace_android_vh_ptype_head(pt, &vendor_pt);
	if (vendor_pt.next)
		return vendor_pt.next;

	if (pt->type == htons(ETH_P_ALL))
		return pt->dev ? &pt->dev->ptype_all : &ptype_all;
	else
+2 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@
#include <linux/capability.h>
#include <linux/user_namespace.h>
#include <linux/indirect_call_wrapper.h>
#include <trace/hooks/net.h>

#include "datagram.h"

@@ -693,6 +694,7 @@ void kfree_skb(struct sk_buff *skb)
	if (!skb_unref(skb))
		return;

	trace_android_vh_kfree_skb(skb);
	trace_kfree_skb(skb, __builtin_return_address(0));
	__kfree_skb(skb);
}
+2 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@
#include <trace/events/tcp.h>
#include <linux/jump_label_ratelimit.h>
#include <net/busy_poll.h>
#include <trace/hooks/net.h>

int sysctl_tcp_max_orphans __read_mostly = NR_FILE;

@@ -4481,6 +4482,7 @@ static bool tcp_ooo_try_coalesce(struct sock *sk,

static void tcp_drop(struct sock *sk, struct sk_buff *skb)
{
	trace_android_vh_kfree_skb(skb);
	sk_drops_add(sk, skb);
	__kfree_skb(skb);
}