Commit 10580c47 authored by Menglong Dong's avatar Menglong Dong Committed by David S. Miller
Browse files

net: ipv4: use kfree_skb_reason() in ip_protocol_deliver_rcu()



Replace kfree_skb() with kfree_skb_reason() in ip_protocol_deliver_rcu().
Following new drop reasons are introduced:

SKB_DROP_REASON_XFRM_POLICY
SKB_DROP_REASON_IP_NOPROTO

Signed-off-by: default avatarMenglong Dong <imagedong@tencent.com>
Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c1f166d1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -339,6 +339,8 @@ enum skb_drop_reason {
						  * is multicast, but L3 is
						  * unicast.
						  */
	SKB_DROP_REASON_XFRM_POLICY,	/* xfrm policy check failed */
	SKB_DROP_REASON_IP_NOPROTO,	/* no support for IP protocol */
	SKB_DROP_REASON_MAX,
};

+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@
	EM(SKB_DROP_REASON_IP_RPFILTER, IP_RPFILTER)		\
	EM(SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST,		\
	   UNICAST_IN_L2_MULTICAST)				\
	EM(SKB_DROP_REASON_XFRM_POLICY, XFRM_POLICY)		\
	EM(SKB_DROP_REASON_IP_NOPROTO, IP_NOPROTO)		\
	EMe(SKB_DROP_REASON_MAX, MAX)

#undef EM
+3 −2
Original line number Diff line number Diff line
@@ -196,7 +196,8 @@ void ip_protocol_deliver_rcu(struct net *net, struct sk_buff *skb, int protocol)
	if (ipprot) {
		if (!ipprot->no_policy) {
			if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
				kfree_skb(skb);
				kfree_skb_reason(skb,
						 SKB_DROP_REASON_XFRM_POLICY);
				return;
			}
			nf_reset_ct(skb);
@@ -215,7 +216,7 @@ void ip_protocol_deliver_rcu(struct net *net, struct sk_buff *skb, int protocol)
				icmp_send(skb, ICMP_DEST_UNREACH,
					  ICMP_PROT_UNREACH, 0);
			}
			kfree_skb(skb);
			kfree_skb_reason(skb, SKB_DROP_REASON_IP_NOPROTO);
		} else {
			__IP_INC_STATS(net, IPSTATS_MIB_INDELIVERS);
			consume_skb(skb);