|
@@ -326,9 +326,10 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
|
|
*/
|
|
*/
|
|
rcu_read_lock();
|
|
rcu_read_lock();
|
|
list_for_each_entry_rcu(laddr, &bp->address_list, list) {
|
|
list_for_each_entry_rcu(laddr, &bp->address_list, list) {
|
|
- if (!laddr->valid && laddr->state != SCTP_ADDR_SRC)
|
|
|
|
|
|
+ if (!laddr->valid)
|
|
continue;
|
|
continue;
|
|
- if ((laddr->a.sa.sa_family == AF_INET6) &&
|
|
|
|
|
|
+ if ((laddr->state == SCTP_ADDR_SRC) &&
|
|
|
|
+ (laddr->a.sa.sa_family == AF_INET6) &&
|
|
(scope <= sctp_scope(&laddr->a))) {
|
|
(scope <= sctp_scope(&laddr->a))) {
|
|
bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a);
|
|
bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a);
|
|
if (!baddr || (matchlen < bmatchlen)) {
|
|
if (!baddr || (matchlen < bmatchlen)) {
|