Commit 9990ddf4 authored by Menglong Dong's avatar Menglong Dong Committed by David S. Miller
Browse files

net: tunnel: make skb_vlan_inet_prepare() return drop reasons



Make skb_vlan_inet_prepare return the skb drop reasons, which is just
what pskb_may_pull_reason() returns. Meanwhile, adjust all the call of
it.

Signed-off-by: default avatarMenglong Dong <dongml2@chinatelecom.cn>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7f20dbd7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -317,7 +317,7 @@ static int bareudp_xmit_skb(struct sk_buff *skb, struct net_device *dev,
	__be32 saddr;
	int err;

	if (!skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
	if (skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
		return -EINVAL;

	if (!sock)
@@ -387,7 +387,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev,
	__be16 sport;
	int err;

	if (!skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
	if (skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
		return -EINVAL;

	if (!sock)
+2 −2
Original line number Diff line number Diff line
@@ -827,7 +827,7 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev,
	__be16 sport;
	int err;

	if (!skb_vlan_inet_prepare(skb, inner_proto_inherit))
	if (skb_vlan_inet_prepare(skb, inner_proto_inherit))
		return -EINVAL;

	if (!gs4)
@@ -937,7 +937,7 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,
	__be16 sport;
	int err;

	if (!skb_vlan_inet_prepare(skb, inner_proto_inherit))
	if (skb_vlan_inet_prepare(skb, inner_proto_inherit))
		return -EINVAL;

	if (!gs6)
+1 −1
Original line number Diff line number Diff line
@@ -2356,7 +2356,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
	__be32 vni = 0;

	no_eth_encap = flags & VXLAN_F_GPE && skb->protocol != htons(ETH_P_TEB);
	if (!skb_vlan_inet_prepare(skb, no_eth_encap))
	if (skb_vlan_inet_prepare(skb, no_eth_encap))
		goto drop;

	old_iph = ip_hdr(skb);
+8 −5
Original line number Diff line number Diff line
@@ -467,11 +467,12 @@ static inline bool pskb_inet_may_pull(struct sk_buff *skb)

/* Variant of pskb_inet_may_pull().
 */
static inline bool skb_vlan_inet_prepare(struct sk_buff *skb,
					 bool inner_proto_inherit)
static inline enum skb_drop_reason
skb_vlan_inet_prepare(struct sk_buff *skb, bool inner_proto_inherit)
{
	int nhlen = 0, maclen = inner_proto_inherit ? 0 : ETH_HLEN;
	__be16 type = skb->protocol;
	enum skb_drop_reason reason;

	/* Essentially this is skb_protocol(skb, true)
	 * And we get MAC len.
@@ -492,11 +493,13 @@ static inline bool skb_vlan_inet_prepare(struct sk_buff *skb,
	/* For ETH_P_IPV6/ETH_P_IP we make sure to pull
	 * a base network header in skb->head.
	 */
	if (!pskb_may_pull(skb, maclen + nhlen))
		return false;
	reason = pskb_may_pull_reason(skb, maclen + nhlen);
	if (reason)
		return reason;

	skb_set_network_header(skb, maclen);
	return true;

	return SKB_NOT_DROPPED_YET;
}

static inline int ip_encap_hlen(struct ip_tunnel_encap *e)