fq_put(fq); 
fq_put(fq, NULL); 
struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb){	struct sk_buff *clone; 	struct net_device *dev = skb->dev;	struct frag_hdr *fhdr;	struct nf_ct_frag6_queue *fq;	struct ipv6hdr *hdr;	int fhoff, nhoff;	u8 prevhdr;	struct sk_buff *ret_skb = NULL;	/* Jumbo payload inhibits frag. header */	if (skb->nh.ipv6h->payload_len == 0) {		DEBUGP("payload len = 0\n");		return skb;	}	if (find_prev_fhdr(skb, &prevhdr, &nhoff, &fhoff) < 0)		return skb;	clone = skb_clone(skb, GFP_ATOMIC);	if (clone == NULL) {		DEBUGP("Can't clone skb\n");		return skb;	}	NFCT_FRAG6_CB(clone)->orig = skb;	if (!pskb_may_pull(clone, fhoff + sizeof(*fhdr))) {		DEBUGP("message is too short.\n");		goto ret_orig;	}	clone->h.raw = clone->data + fhoff;	hdr = clone->nh.ipv6h;	fhdr = (struct frag_hdr *)clone->h.raw;	if (!(fhdr->frag_off & htons(0xFFF9))) {		DEBUGP("Invalid fragment offset\n");		/* It is not a fragmented frame */		goto ret_orig;	}	if (atomic_read(&nf_ct_frag6_mem) > nf_ct_frag6_high_thresh)		nf_ct_frag6_evictor();	fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr);	if (fq == NULL) {		DEBUGP("Can't find and can't create new queue\n");		goto ret_orig;	}	spin_lock(&fq->lock);	if (nf_ct_frag6_queue(fq, clone, fhdr, nhoff) < 0) {		spin_unlock(&fq->lock);		DEBUGP("Can't insert skb to queue\n");		fq_put(fq);		goto ret_orig;	}	if (fq->last_in == (FIRST_IN|LAST_IN) && fq->meat == fq->len) {		ret_skb = nf_ct_frag6_reasm(fq, dev);		if (ret_skb == NULL)			DEBUGP("Can't reassemble fragmented packets\n");	}	spin_unlock(&fq->lock);	fq_put(fq);	return ret_skb;ret_orig:	kfree_skb(clone);	return skb;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1ba430bc3e243d38c0bb2b185bea664b04fc59df/nf_conntrack_reasm.c/buggy/net/ipv6/netfilter/nf_conntrack_reasm.c