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: Menglong Dong <imagedong@tencent.com> Reviewed-by: David Ahern <dsahern@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c1f166d1f7
commit
10580c4791
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user