if (asoc->peer.cookie) { kfree(asoc->peer.cookie); } 
kfree(asoc->peer.cookie); 
void sctp_association_free(struct sctp_association *asoc){	struct sock *sk = asoc->base.sk;	struct sctp_transport *transport;	struct list_head *pos, *temp;	int i;	list_del(&asoc->asocs);	/* Decrement the backlog value for a TCP-style listening socket. */	if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))		sk->sk_ack_backlog--;	/* Mark as dead, so other users can know this structure is	 * going away.	 */	asoc->base.dead = 1;	/* Dispose of any data lying around in the outqueue. */	sctp_outq_free(&asoc->outqueue);	/* Dispose of any pending messages for the upper layer. */	sctp_ulpq_free(&asoc->ulpq);	/* Dispose of any pending chunks on the inqueue. */	sctp_inq_free(&asoc->base.inqueue);	/* Free ssnmap storage. */	sctp_ssnmap_free(asoc->ssnmap);	/* Clean up the bound address list. */	sctp_bind_addr_free(&asoc->base.bind_addr);	/* Do we need to go through all of our timers and	 * delete them?   To be safe we will try to delete all, but we	 * should be able to go through and make a guess based	 * on our state.	 */	for (i = SCTP_EVENT_TIMEOUT_NONE; i < SCTP_NUM_TIMEOUT_TYPES; ++i) {		if (timer_pending(&asoc->timers[i]) &&		    del_timer(&asoc->timers[i]))			sctp_association_put(asoc);	}	/* Free peer's cached cookie. */	if (asoc->peer.cookie) {		kfree(asoc->peer.cookie);	}	/* Release the transport structures. */	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {		transport = list_entry(pos, struct sctp_transport, transports);		list_del(pos);		sctp_transport_free(transport);	}	asoc->peer.transport_count = 0;	/* Free any cached ASCONF_ACK chunk. */	if (asoc->addip_last_asconf_ack)		sctp_chunk_free(asoc->addip_last_asconf_ack);	/* Free any cached ASCONF chunk. */	if (asoc->addip_last_asconf)		sctp_chunk_free(asoc->addip_last_asconf);	sctp_association_put(asoc);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/a51482bde22f99c63fbbb57d5d46cc666384e379/associola.c/clean/net/sctp/associola.c