struct sock *sk = icmpv6_socket->sk; 
struct sock *sk; 
static void icmpv6_echo_reply(struct sk_buff *skb){	struct sock *sk = icmpv6_socket->sk;	struct inet6_dev *idev;	struct ipv6_pinfo *np = inet6_sk(sk);	struct in6_addr *saddr = NULL;	struct icmp6hdr *icmph = (struct icmp6hdr *) skb->h.raw;	struct icmp6hdr tmp_hdr;	struct flowi fl;	struct icmpv6_msg msg;	struct dst_entry *dst;	int err = 0;	int hlimit;	saddr = &skb->nh.ipv6h->daddr;	if (!ipv6_unicast_destination(skb))		saddr = NULL;	memcpy(&tmp_hdr, icmph, sizeof(tmp_hdr));	tmp_hdr.icmp6_type = ICMPV6_ECHO_REPLY;	memset(&fl, 0, sizeof(fl));	fl.proto = IPPROTO_ICMPV6;	ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr);	if (saddr)		ipv6_addr_copy(&fl.fl6_src, saddr);	fl.oif = skb->dev->ifindex;	fl.fl_icmp_type = ICMPV6_ECHO_REPLY;	if (icmpv6_xmit_lock())		return;	if (!fl.oif && ipv6_addr_is_multicast(&fl.fl6_dst))		fl.oif = np->mcast_oif;	err = ip6_dst_lookup(sk, &dst, &fl);	if (err)		goto out;	if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0)		goto out_dst_release;	if (ipv6_addr_is_multicast(&fl.fl6_dst))		hlimit = np->mcast_hops;	else		hlimit = np->hop_limit;	if (hlimit < 0)		hlimit = dst_metric(dst, RTAX_HOPLIMIT);	if (hlimit < 0)		hlimit = ipv6_get_hoplimit(dst->dev);	idev = in6_dev_get(skb->dev);	msg.skb = skb;	msg.offset = 0;	err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr),				sizeof(struct icmp6hdr), hlimit, NULL, &fl,				(struct rt6_info*)dst, MSG_DONTWAIT);	if (err) {		ip6_flush_pending_frames(sk);		goto out_put;	}	err = icmpv6_push_pending_frames(sk, &fl, &tmp_hdr, skb->len + sizeof(struct icmp6hdr));        ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTECHOREPLIES);        ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTMSGS);out_put: 	if (likely(idev != NULL))		in6_dev_put(idev);out_dst_release:	dst_release(dst);out: 	icmpv6_xmit_unlock();}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/84427d533076a08137779b3182a71c37bf000b27/icmp.c/buggy/net/ipv6/icmp.c