Hi Cong, On Fri, May 20, 2016, at 00:33, Cong Wang wrote: > On Thu, May 19, 2016 at 6:58 AM, Hannes Frederic Sowa > <han...@stressinduktion.org> wrote: > > diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c > > index 2e3ebfe5549ef5..d56c0559b477cb 100644 > > --- a/net/ipv4/udp.c > > +++ b/net/ipv4/udp.c > > @@ -1565,7 +1565,7 @@ int udp_queue_rcv_skb(struct sock *sk, struct sk_buff > > *skb) > > > > /* if we're overly short, let UDP handle it */ > > encap_rcv = ACCESS_ONCE(up->encap_rcv); > > - if (skb->len > sizeof(struct udphdr) && encap_rcv) { > > + if (encap_rcv) { > > > I don't think you can just remove it here, l2tp_udp_recv_core() still > relies on it: > > /* UDP has verifed checksum */ > > /* UDP always verifies the packet length. */ > __skb_pull(skb, sizeof(struct udphdr));
I think this is fine, we check on every entrance to udp that we may pull (pskb_may_pull) an udphdr but we really never pull the header. At this point we are guaranteed to have skb->len of at least sizeof(struct udphdr). Bye, Hannes