diff options
Diffstat (limited to 'net/sctp/bind_addr.c')
| -rw-r--r-- | net/sctp/bind_addr.c | 10 | 
1 files changed, 4 insertions, 6 deletions
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c index faf71d179e4..6150ac5cf5d 100644 --- a/net/sctp/bind_addr.c +++ b/net/sctp/bind_addr.c @@ -140,14 +140,12 @@ void sctp_bind_addr_init(struct sctp_bind_addr *bp, __u16 port)  /* Dispose of the address list. */  static void sctp_bind_addr_clean(struct sctp_bind_addr *bp)  { -	struct sctp_sockaddr_entry *addr; -	struct list_head *pos, *temp; +	struct sctp_sockaddr_entry *addr, *temp;  	/* Empty the bind address list. */ -	list_for_each_safe(pos, temp, &bp->address_list) { -		addr = list_entry(pos, struct sctp_sockaddr_entry, list); -		list_del(pos); -		kfree(addr); +	list_for_each_entry_safe(addr, temp, &bp->address_list, list) { +		list_del_rcu(&addr->list); +		call_rcu(&addr->rcu, sctp_local_addr_free);  		SCTP_DBG_OBJCNT_DEC(addr);  	}  }  |