Skip to content

Commit

Permalink
[SCTP]: Verify all destination ports in sctp_connectx.
Browse files Browse the repository at this point in the history
We need to make sure that all destination ports are the same, since
the association really must not connect to multiple different ports
at once.  This was reported on the sctp-impl list.

Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Vlad Yasevich authored and David S. Miller committed May 4, 2007
1 parent 5a6d341 commit 16d00fb
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions net/sctp/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,7 @@ static int __sctp_connect(struct sock* sk,
int walk_size = 0;
union sctp_addr *sa_addr;
void *addr_buf;
unsigned short port;

sp = sctp_sk(sk);
ep = sp->ep;
Expand All @@ -992,6 +993,7 @@ static int __sctp_connect(struct sock* sk,
while (walk_size < addrs_size) {
sa_addr = (union sctp_addr *)addr_buf;
af = sctp_get_af_specific(sa_addr->sa.sa_family);
port = ntohs(sa_addr->v4.sin_port);

/* If the address family is not supported or if this address
* causes the address buffer to overflow return EINVAL.
Expand All @@ -1005,6 +1007,12 @@ static int __sctp_connect(struct sock* sk,
if (err)
goto out_free;

/* Make sure the destination port is correctly set
* in all addresses.
*/
if (asoc && asoc->peer.port && asoc->peer.port != port)
goto out_free;

memcpy(&to, sa_addr, af->sockaddr_len);

/* Check if there already is a matching association on the
Expand Down

0 comments on commit 16d00fb

Please sign in to comment.