diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index 42f31c681846..905661a25d4e 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -934,6 +931,9 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev, return -EMSGSIZE; } + if (!pskb_network_may_pull(skb, sizeof(struct iphdr))) + return -EINVAL; + if (geneve->cfg.collect_md) { tos = ip_tunnel_ecn_encap(key->tos, ip_hdr(skb), skb); ttl = key->ttl; @@ -1030,6 +1027,9 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev, return -EMSGSIZE; } + if (!pskb_network_may_pull(skb, sizeof(struct ipv6hdr))) + return -EINVAL; + if (geneve->cfg.collect_md) { prio = ip_tunnel_ecn_encap(key->tos, ip_hdr(skb), skb); ttl = key->ttl;