|
@@ -677,6 +677,9 @@ static netdev_tx_t ipgre_xmit(struct sk_buff *skb,
|
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
|
const struct iphdr *tnl_params;
|
|
const struct iphdr *tnl_params;
|
|
|
|
|
|
|
|
|
|
+ if (!pskb_inet_may_pull(skb))
|
|
|
|
|
+ goto free_skb;
|
|
|
|
|
+
|
|
|
if (tunnel->collect_md) {
|
|
if (tunnel->collect_md) {
|
|
|
gre_fb_xmit(skb, dev, skb->protocol);
|
|
gre_fb_xmit(skb, dev, skb->protocol);
|
|
|
return NETDEV_TX_OK;
|
|
return NETDEV_TX_OK;
|
|
@@ -720,6 +723,9 @@ static netdev_tx_t erspan_xmit(struct sk_buff *skb,
|
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
|
bool truncate = false;
|
|
bool truncate = false;
|
|
|
|
|
|
|
|
|
|
+ if (!pskb_inet_may_pull(skb))
|
|
|
|
|
+ goto free_skb;
|
|
|
|
|
+
|
|
|
if (tunnel->collect_md) {
|
|
if (tunnel->collect_md) {
|
|
|
erspan_fb_xmit(skb, dev, skb->protocol);
|
|
erspan_fb_xmit(skb, dev, skb->protocol);
|
|
|
return NETDEV_TX_OK;
|
|
return NETDEV_TX_OK;
|
|
@@ -763,6 +769,9 @@ static netdev_tx_t gre_tap_xmit(struct sk_buff *skb,
|
|
|
{
|
|
{
|
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
|
|
|
|
|
|
|
|
|
+ if (!pskb_inet_may_pull(skb))
|
|
|
|
|
+ goto free_skb;
|
|
|
|
|
+
|
|
|
if (tunnel->collect_md) {
|
|
if (tunnel->collect_md) {
|
|
|
gre_fb_xmit(skb, dev, htons(ETH_P_TEB));
|
|
gre_fb_xmit(skb, dev, htons(ETH_P_TEB));
|
|
|
return NETDEV_TX_OK;
|
|
return NETDEV_TX_OK;
|