summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAl Viro2006-11-21 02:03:18 +0100
committerDavid S. Miller2006-12-03 06:26:28 +0100
commit30330ee00ce077de9d459c17125573ff618bd7a9 (patch)
treef771ee4498c9d80677118a4eb3d1a95e303a8eef /net
parent[SCTP] bug: sctp_assoc_control_transport() breakage (diff)
downloadkernel-qcow2-linux-30330ee00ce077de9d459c17125573ff618bd7a9.tar.gz
kernel-qcow2-linux-30330ee00ce077de9d459c17125573ff618bd7a9.tar.xz
kernel-qcow2-linux-30330ee00ce077de9d459c17125573ff618bd7a9.zip
[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')
-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 f4d13ab79f49..b6e038a387c2 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);