diff options
Diffstat (limited to 'net/sctp/protocol.c')
-rw-r--r-- | net/sctp/protocol.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 2db140e901d0..d1fbd1f5c6d1 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -316,7 +316,7 @@ static int sctp_v4_to_addr_param(const union sctp_addr *addr, | |||
316 | 316 | ||
317 | /* Initialize a sctp_addr from a dst_entry. */ | 317 | /* Initialize a sctp_addr from a dst_entry. */ |
318 | static void sctp_v4_dst_saddr(union sctp_addr *saddr, struct dst_entry *dst, | 318 | static void sctp_v4_dst_saddr(union sctp_addr *saddr, struct dst_entry *dst, |
319 | unsigned short port) | 319 | __be16 port) |
320 | { | 320 | { |
321 | struct rtable *rt = (struct rtable *)dst; | 321 | struct rtable *rt = (struct rtable *)dst; |
322 | saddr->v4.sin_family = AF_INET; | 322 | saddr->v4.sin_family = AF_INET; |
@@ -478,14 +478,12 @@ static struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc, | |||
478 | */ | 478 | */ |
479 | sctp_read_lock(addr_lock); | 479 | sctp_read_lock(addr_lock); |
480 | list_for_each(pos, &bp->address_list) { | 480 | list_for_each(pos, &bp->address_list) { |
481 | union sctp_addr tmp; | ||
482 | laddr = list_entry(pos, struct sctp_sockaddr_entry, | 481 | laddr = list_entry(pos, struct sctp_sockaddr_entry, |
483 | list); | 482 | list); |
484 | if (!laddr->use_as_src) | 483 | if (!laddr->use_as_src) |
485 | continue; | 484 | continue; |
486 | sctp_v4_dst_saddr(&dst_saddr, dst, bp->port); | 485 | sctp_v4_dst_saddr(&dst_saddr, dst, htons(bp->port)); |
487 | flip_to_n(&tmp, &dst_saddr); | 486 | if (sctp_v4_cmp_addr(&dst_saddr, &laddr->a)) |
488 | if (sctp_v4_cmp_addr(&tmp, &laddr->a)) | ||
489 | goto out_unlock; | 487 | goto out_unlock; |
490 | } | 488 | } |
491 | sctp_read_unlock(addr_lock); | 489 | sctp_read_unlock(addr_lock); |