diff options
author | Vlad Yasevich <vladislav.yasevich@hp.com> | 2008-01-28 14:25:36 -0500 |
---|---|---|
committer | Vlad Yasevich <vladislav.yasevich@hp.com> | 2008-02-06 21:27:39 -0500 |
commit | b46ae36de451212d253f31112338517753739191 (patch) | |
tree | eccdb446b5d29a09ad9e8bb28ada1c99361b93ce /net/sctp/socket.c | |
parent | c068be5491924c1c1c37dc046f36976c27bc7bb2 (diff) | |
download | linux-b46ae36de451212d253f31112338517753739191.tar.gz linux-b46ae36de451212d253f31112338517753739191.tar.bz2 linux-b46ae36de451212d253f31112338517753739191.zip |
[SCTP]: Set ports in every address returned by sctp_getladdrs()
Thomas Dreibholz has reported that port numbers are not filled
in the results of sctp_getladdrs() when the socket was bound
to an ephemeral port. This is only true, if the address was
not specified either. So, fill in the port number correctly.
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r-- | net/sctp/socket.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 894c278c8cdc..d47d5787e2e5 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -4315,6 +4315,9 @@ static int sctp_copy_laddrs_old(struct sock *sk, __u16 port, (AF_INET6 == addr->a.sa.sa_family)) continue; memcpy(&temp, &addr->a, sizeof(temp)); + if (!temp.v4.sin_port) + temp.v4.sin_port = htons(port); + sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; @@ -4347,6 +4350,9 @@ static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to, (AF_INET6 == addr->a.sa.sa_family)) continue; memcpy(&temp, &addr->a, sizeof(temp)); + if (!temp.v4.sin_port) + temp.v4.sin_port = htons(port); + sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; |