*epp = ep; 
struct sock *sctp_err_lookup(int family, struct sk_buff *skb,			     struct sctphdr *sctphdr,			     struct sctp_endpoint **epp,			     struct sctp_association **app,			     struct sctp_transport **tpp){	union sctp_addr saddr;	union sctp_addr daddr;	struct sctp_af *af;	struct sock *sk = NULL;	struct sctp_endpoint *ep = NULL;	struct sctp_association *asoc = NULL;	struct sctp_transport *transport = NULL;	*app = NULL; *epp = NULL; *tpp = NULL;	af = sctp_get_af_specific(family);	if (unlikely(!af)) {		return NULL;	}	/* Initialize local addresses for lookups. */	af->from_skb(&saddr, skb, 1);	af->from_skb(&daddr, skb, 0);	/* Look for an association that matches the incoming ICMP error	 * packet.	 */	asoc = __sctp_lookup_association(&saddr, &daddr, &transport);	if (!asoc) {		/* If there is no matching association, see if it matches any		 * endpoint. This may happen for an ICMP error generated in		 * response to an INIT_ACK.		 */		ep = __sctp_rcv_lookup_endpoint(&daddr);		if (!ep) {			return NULL;		}	}	if (asoc) {		sk = asoc->base.sk;		if (ntohl(sctphdr->vtag) != asoc->c.peer_vtag) {			ICMP_INC_STATS_BH(ICMP_MIB_INERRORS);			goto out;		}	} else		sk = ep->base.sk;	sctp_bh_lock_sock(sk);	/* If too many ICMPs get dropped on busy	 * servers this needs to be solved differently.	 */	if (sock_owned_by_user(sk))		NET_INC_STATS_BH(LINUX_MIB_LOCKDROPPEDICMPS);	*epp = ep;	*app = asoc;	*tpp = transport;	return sk;out:	sock_put(sk);	if (asoc)		sctp_association_put(asoc);	if (ep)		sctp_endpoint_put(ep);	return NULL;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d1ad1ff299dd908d07c5e5f27f88bbdb235eb7a5/input.c/clean/net/sctp/input.c