On Wed, Nov 01, 2017 at 03:57:41AM +0800, Eric Garver wrote: > On Mon, Oct 30, 2017 at 09:29:34AM +0800, Yi Yang wrote: > [...] > > +int nsh_pop(struct sk_buff *skb) > > +{ > > + struct nshhdr *nh; > > + size_t length; > > + __be16 inner_proto; > > + > > + if (!pskb_may_pull(skb, NSH_BASE_HDR_LEN)) > > + return -ENOMEM; > > + nh = (struct nshhdr *)(skb->data); > > + length = nsh_hdr_len(nh); > > + if (!pskb_may_pull(skb, length)) > > + return -ENOMEM; > > + > > + nh = (struct nshhdr *)(skb->data); > > + inner_proto = tun_p_to_eth_p(nh->np); > > If you fetch inner_proto before the second pskb_may_pull then there is > no need to reload the nh pointer as you won't use it later. > > > + if (!inner_proto) > > + return -EAFNOSUPPORT; > > + > > + length = nsh_hdr_len(nh); > > You already have the length from above. No need to get it again.
Good catch, fixed in v15.