From: William Tu > Sent: 05 October 2017 01:14 > Similarly to early patch for erspan_xmit(), the ARPHDR_ETHER device > is the length of the whole ether packet. So skb->len should subtract > the dev->hard_header_len. > > Fixes: 1a66a836da63 ("gre: add collect_md mode to ERSPAN tunnel") > Signed-off-by: William Tu <u9012...@gmail.com> > Cc: Xin Long <lucien....@gmail.com> > --- > net/ipv4/ip_gre.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c > index b279c325c7f6..10b21fe5b3a6 100644 > --- a/net/ipv4/ip_gre.c > +++ b/net/ipv4/ip_gre.c > @@ -579,7 +579,7 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct > net_device *dev, > if (gre_handle_offloads(skb, false)) > goto err_free_rt; > > - if (skb->len > dev->mtu) { > + if (skb->len - dev->hard_header_len > dev->mtu) {
Can you guarantee that skb->len > dev_hard_header_len? It is probably safer to check skb->len > dev->hard_header_len + dev->mtu since that addition isn't going to overflow. > pskb_trim(skb, dev->mtu); > truncate = true; Is that pskb_trim() now truncating to the correct size? David