Re: linux-next: manual merge of the ipvs-next tree with the tree
From: Pablo Neira Ayuso <pablo@netfilter.org>
Date: 2015-12-01 19:55:51
Also in:
linux-next, lkml
On Tue, Dec 01, 2015 at 07:26:09PM +0000, Mark Brown wrote:
Hi Simon,
Today's linux-next merge of the ipvs-next tree got a conflict in
between commit 264640fc2c5f4f ("ipv6: distinguish frag queues by
device for multicast and link-local packets") from the net tree and
commit 029f7f3b8701c ("netfilter: ipv6: nf_defrag: avoid/free clone
operations") from the ipvs-next tree.
I fixed it up (see below) and can carry the fix as necessary (no action
is required).This a clash between Florian's fragmentation work and David's net tree: https://lkml.org/lkml/2015/11/24/732 I'll be using this here to resolve this conflict here before passing nf-next updates to David. Thanks.
quoted hunk ↗ jump to hunk
diff --cc net/ipv6/netfilter/nf_conntrack_reasm.c index bab4441ed4e4,912bc3afc183..000000000000--- a/net/ipv6/netfilter/nf_conntrack_reasm.c +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c@@@ -582,31 -576,19 +577,21 @@@ int nf_ct_frag6_gather(struct net *net } if (find_prev_fhdr(skb, &prevhdr, &nhoff, &fhoff) < 0) - return skb; + return -EINVAL; - clone = skb_clone(skb, GFP_ATOMIC); - if (clone == NULL) { - pr_debug("Can't clone skb\n"); - return skb; - } - - NFCT_FRAG6_CB(clone)->orig = skb; - - if (!pskb_may_pull(clone, fhoff + sizeof(*fhdr))) { - pr_debug("message is too short.\n"); - goto ret_orig; - } + if (!pskb_may_pull(skb, fhoff + sizeof(*fhdr))) + return -ENOMEM; - skb_set_transport_header(clone, fhoff); - hdr = ipv6_hdr(clone); - fhdr = (struct frag_hdr *)skb_transport_header(clone); + skb_set_transport_header(skb, fhoff); + hdr = ipv6_hdr(skb); + fhdr = (struct frag_hdr *)skb_transport_header(skb); fq = fq_find(net, fhdr->identification, user, &hdr->saddr, &hdr->daddr, - ip6_frag_ecn(hdr)); - if (fq == NULL) + skb->dev ? skb->dev->ifindex : 0, ip6_frag_ecn(hdr)); + if (fq == NULL) { + pr_debug("Can't find and can't create new queue\n"); - goto ret_orig; + return -ENOMEM; + } spin_lock_bh(&fq->q.lock);