Verify all destination ports in sctp_connectx.
Subsystems (3)
PATCH 1/1 Verify all destination ports in sctp_connectx.
Hi David
Please apply. This was recently uncovered on the sctp-implementers list as 'linux doing something stupid...'
Thanks
-vlad
[SCTP] Verify all destination ports in sctp_connectx.
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 <[email protected]>
--- net/sctp/socket.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
net/sctp/socket.c +8 -0
@@ -966,6 +966,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;
@@ -986,6 +987,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.
@@ -999,6 +1001,12 @@ static int __sctp_connect(struct sock* sk,if (err) goto out_free; +/* Make sure the destination port is set to the same +* value in each address. +*/ +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
Signature · 1 line
1.5.0.3.438.gc49b2