On Fri, Oct 6, 2017 at 2:38 AM, David Laight <david.lai...@aculab.com> wrote: > From: William Tu >> Sent: 05 October 2017 22:21 > ... >> >> - 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. >> Sure, I will fix it. >> >> > >> >> pskb_trim(skb, dev->mtu); >> >> truncate = true; >> > >> > Is that pskb_trim() now truncating to the correct size? >> >> You're right, now I should truncate to (dev->mtu + dev_hard_header_len) > > It might be worth caching that length in the dev structure > to avoid the arithmetic on every packet. > > David > Thanks for the advise. Yes, adding another field in the struct net_device can avoid the arithmetic operation. I'm not sure it's a good idea to add new field since there are already a lot in net_device. Let's wait to see how others think.
William