|
@@ -579,6 +579,7 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct net_device *dev,
|
|
|
int version;
|
|
|
__be16 df;
|
|
|
int nhoff;
|
|
|
+ int thoff;
|
|
|
|
|
|
tun_info = skb_tunnel_info(skb);
|
|
|
if (unlikely(!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX) ||
|
|
@@ -611,6 +612,11 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct net_device *dev,
|
|
|
(ntohs(ip_hdr(skb)->tot_len) > skb->len - nhoff))
|
|
|
truncate = true;
|
|
|
|
|
|
+ thoff = skb_transport_header(skb) - skb_mac_header(skb);
|
|
|
+ if (skb->protocol == htons(ETH_P_IPV6) &&
|
|
|
+ (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff))
|
|
|
+ truncate = true;
|
|
|
+
|
|
|
if (version == 1) {
|
|
|
erspan_build_header(skb, ntohl(tunnel_id_to_key32(key->tun_id)),
|
|
|
ntohl(md->u.index), truncate, true);
|