summaryrefslogtreecommitdiff
path: root/net/sctp/socket.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2006-11-21 01:03:18 (GMT)
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-03 05:26:28 (GMT)
commit30330ee00ce077de9d459c17125573ff618bd7a9 (patch)
treef771ee4498c9d80677118a4eb3d1a95e303a8eef /net/sctp/socket.c
parent0906e20fa03afdb14faf7fd166bfe4ed67c8db55 (diff)
downloadlinux-30330ee00ce077de9d459c17125573ff618bd7a9.tar.xz
[SCTP] bug: endianness problem in sctp_getsockopt_sctp_status()
Again, invalid sockaddr passed to userland - host-endiand sin_port. Potential leak, again, but less dramatic than in previous case. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r--net/sctp/socket.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index f4d13ab..b6e038a 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -3217,8 +3217,8 @@ static int sctp_getsockopt_sctp_status(struct sock *sk, int len,
status.sstat_outstrms = asoc->c.sinit_num_ostreams;
status.sstat_fragmentation_point = asoc->frag_point;
status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
- memcpy(&status.sstat_primary.spinfo_address,
- &(transport->ipaddr), sizeof(union sctp_addr));
+ flip_to_n((union sctp_addr *)&status.sstat_primary.spinfo_address,
+ &transport->ipaddr);
/* Map ipv4 address into v4-mapped-on-v6 address. */
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
(union sctp_addr *)&status.sstat_primary.spinfo_address);