diff options
Diffstat (limited to 'net/sctp/bind_addr.c')
| -rw-r--r-- | net/sctp/bind_addr.c | 16 | 
1 files changed, 13 insertions, 3 deletions
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c index f62bc246893..6d5944a745d 100644 --- a/net/sctp/bind_addr.c +++ b/net/sctp/bind_addr.c @@ -457,7 +457,7 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest,  {  	int error = 0; -	if (sctp_is_any(addr)) { +	if (sctp_is_any(NULL, addr)) {  		error = sctp_copy_local_addr_list(dest, scope, gfp, flags);  	} else if (sctp_in_scope(addr, scope)) {  		/* Now that the address is in scope, check to see if @@ -477,11 +477,21 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest,  }  /* Is this a wildcard address?  */ -int sctp_is_any(const union sctp_addr *addr) +int sctp_is_any(struct sock *sk, const union sctp_addr *addr)  { -	struct sctp_af *af = sctp_get_af_specific(addr->sa.sa_family); +	unsigned short fam = 0; +	struct sctp_af *af; + +	/* Try to get the right address family */ +	if (addr->sa.sa_family != AF_UNSPEC) +		fam = addr->sa.sa_family; +	else if (sk) +		fam = sk->sk_family; + +	af = sctp_get_af_specific(fam);  	if (!af)  		return 0; +  	return af->is_any(addr);  }  |