&skb->nh.ipv6h->saddr); 
&skb->nh.ipv6h->saddr, &NETLINK_CB(skb)); 
void ip6_route_input(struct sk_buff *skb){	struct fib6_node *fn;	struct rt6_info *rt;	int strict;	int attempts = 3;	strict = ipv6_addr_type(&skb->nh.ipv6h->daddr) & (IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL);relookup:	read_lock_bh(&rt6_lock);	fn = fib6_lookup(&ip6_routing_table, &skb->nh.ipv6h->daddr,			 &skb->nh.ipv6h->saddr);restart:	rt = fn->leaf;	if ((rt->rt6i_flags & RTF_CACHE)) {		rt = rt6_device_match(rt, skb->dev->ifindex, strict);		BACKTRACK();		dst_hold(&rt->u.dst);		goto out;	}	rt = rt6_device_match(rt, skb->dev->ifindex, 0);	BACKTRACK();	if (!rt->rt6i_nexthop && !(rt->rt6i_flags & RTF_NONEXTHOP)) {		struct rt6_info *nrt;		dst_hold(&rt->u.dst);		read_unlock_bh(&rt6_lock);		nrt = rt6_cow(rt, &skb->nh.ipv6h->daddr,			      &skb->nh.ipv6h->saddr);		dst_release(&rt->u.dst);		rt = nrt;		if (rt->u.dst.error != -EEXIST || --attempts <= 0)			goto out2;		/* Race condition! In the gap, when rt6_lock was		   released someone could insert this route.  Relookup.		*/		dst_release(&rt->u.dst);		goto relookup;	}	dst_hold(&rt->u.dst);out:	read_unlock_bh(&rt6_lock);out2:	rt->u.dst.lastuse = jiffies;	rt->u.dst.__use++;	skb->dst = (struct dst_entry *) rt;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d51aa80a9b1db43920c0770c3bb842dd823c005/route.c/buggy/net/ipv6/route.c