e->skb->nfcache |= NFC_ALTERED; 
ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct ipq_queue_entry *e){	int diff;	struct ipv6hdr *user_iph = (struct ipv6hdr *)v->payload;	if (v->data_len < sizeof(*user_iph))		return 0;	diff = v->data_len - e->skb->len;	if (diff < 0)		skb_trim(e->skb, v->data_len);	else if (diff > 0) {		if (v->data_len > 0xFFFF)			return -EINVAL;		if (diff > skb_tailroom(e->skb)) {			struct sk_buff *newskb;						newskb = skb_copy_expand(e->skb,			                         skb_headroom(e->skb),			                         diff,			                         GFP_ATOMIC);			if (newskb == NULL) {				printk(KERN_WARNING "ip6_queue: OOM "				      "in mangle, dropping packet\n");				return -ENOMEM;			}			if (e->skb->sk)				skb_set_owner_w(newskb, e->skb->sk);			kfree_skb(e->skb);			e->skb = newskb;		}		skb_put(e->skb, diff);	}	if (!skb_ip_make_writable(&e->skb, v->data_len))		return -ENOMEM;	memcpy(e->skb->data, v->payload, v->data_len);	e->skb->ip_summed = CHECKSUM_NONE;	e->skb->nfcache |= NFC_ALTERED;	/*	 * Extra routing may needed on local out, as the QUEUE target never	 * returns control to the table.         * Not a nice way to cmp, but works	 */	if (e->info->hook == NF_IP_LOCAL_OUT) {		struct ipv6hdr *iph = e->skb->nh.ipv6h;		if (!ipv6_addr_equal(&iph->daddr, &e->rt_info.daddr) ||		    !ipv6_addr_equal(&iph->saddr, &e->rt_info.saddr))			return ip6_route_me_harder(e->skb);	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/6869c4d8e066e21623c812c448a05f1ed931c9c6/ip6_queue.c/buggy/net/ipv6/netfilter/ip6_queue.c