On Wed, Jan 30, 2019 at 2:50 PM Eric Dumazet <eduma...@google.com> wrote: > > Right, @err needs to be set properly. > > Probably something like : > > diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c > index > f8bbd693c19c247e41839c2d0b5318ca51b23ee8..dbd14530510a934230096b293c4042dd65c672c5 > 100644 > --- a/net/ipv4/ip_fragment.c > +++ b/net/ipv4/ip_fragment.c > @@ -443,6 +443,7 @@ static int ip_frag_queue(struct ipq *qp, struct > sk_buff *skb) > * but not the last (covered above). > */ > rbn = &qp->q.rb_fragments.rb_node; > + err = -EINVAL; > do { > parent = *rbn; > skb1 = rb_to_skb(parent); > @@ -501,7 +502,6 @@ static int ip_frag_queue(struct ipq *qp, struct > sk_buff *skb) > > discard_qp: > inet_frag_kill(&qp->q); > - err = -EINVAL; > __IP_INC_STATS(net, IPSTATS_MIB_REASM_OVERLAPS); > err: > kfree_skb(skb);
Or even better :/ diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index f8bbd693c19c247e41839c2d0b5318ca51b23ee8..d95b32af4a0e3f552405c9e61cc372729834160c 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c @@ -425,6 +425,7 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb) * fragment. */ + err = -EINVAL; /* Find out where to put this fragment. */ prev_tail = qp->q.fragments_tail; if (!prev_tail) @@ -501,7 +502,6 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb) discard_qp: inet_frag_kill(&qp->q); - err = -EINVAL; __IP_INC_STATS(net, IPSTATS_MIB_REASM_OVERLAPS); err: kfree_skb(skb);