[SCTP]: Switch sctp_add_bind_addr() to net-endian.
Al Viro [Tue, 21 Nov 2006 01:10:38 +0000 (17:10 -0800)]
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>

net/sctp/bind_addr.c
net/sctp/protocol.c
net/sctp/sm_make_chunk.c
net/sctp/socket.c

index eafdd11..eb3a5e2 100644 (file)
@@ -155,15 +155,15 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new,
        if (!addr)
                return -ENOMEM;
 
-       memcpy(&addr->a_h, new, sizeof(*new));
+       memcpy(&addr->a, new, sizeof(*new));
 
        /* Fix up the port if it has not yet been set.
         * Both v4 and v6 have the port at the same offset.
         */
-       if (!addr->a_h.v4.sin_port)
-               addr->a_h.v4.sin_port = bp->port;
+       if (!addr->a.v4.sin_port)
+               addr->a.v4.sin_port = htons(bp->port);
 
-       flip_to_n(&addr->a, &addr->a_h);
+       flip_to_h(&addr->a_h, &addr->a);
 
        addr->use_as_src = use_as_src;
 
@@ -264,6 +264,7 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list,
        int retval = 0;
        int len;
        struct sctp_af *af;
+       union sctp_addr tmp;
 
        /* Convert the raw address to standard address format */
        while (addrs_len) {
@@ -278,7 +279,8 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list,
                }
 
                af->from_addr_param(&addr, rawaddr, port, 0);
-               retval = sctp_add_bind_addr(bp, &addr, 1, gfp);
+               flip_to_n(&tmp, &addr);
+               retval = sctp_add_bind_addr(bp, &tmp, 1, gfp);
                if (retval) {
                        /* Can't finish building the list, clean up. */
                        sctp_bind_addr_clean(bp);
@@ -358,6 +360,8 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest,
                              int flags)
 {
        int error = 0;
+       union sctp_addr tmp;
+       flip_to_n(&tmp, addr);
 
        if (sctp_is_any(addr)) {
                error = sctp_copy_local_addr_list(dest, scope, gfp, flags);
@@ -371,7 +375,7 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest,
                    (((AF_INET6 == addr->sa.sa_family) &&
                      (flags & SCTP_ADDR6_ALLOWED) &&
                      (flags & SCTP_ADDR6_PEERSUPP))))
-                       error = sctp_add_bind_addr(dest, addr, 1, gfp);
+                       error = sctp_add_bind_addr(dest, &tmp, 1, gfp);
        }
 
        return error;
index d08bafd..a6bcbf5 100644 (file)
@@ -234,7 +234,7 @@ int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope,
                            (((AF_INET6 == addr->a_h.sa.sa_family) &&
                              (copy_flags & SCTP_ADDR6_ALLOWED) &&
                              (copy_flags & SCTP_ADDR6_PEERSUPP)))) {
-                               error = sctp_add_bind_addr(bp, &addr->a_h, 1,
+                               error = sctp_add_bind_addr(bp, &addr->a, 1,
                                                           GFP_ATOMIC);
                                if (error)
                                        goto end_copy;
index 2c887d3..46cfcca 100644 (file)
@@ -1507,7 +1507,9 @@ no_hmac:
 
        /* Also, add the destination address. */
        if (list_empty(&retval->base.bind_addr.address_list)) {
-               sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, 1,
+               union sctp_addr tmp;
+               flip_to_n(&tmp, &chunk->dest);
+               sctp_add_bind_addr(&retval->base.bind_addr, &tmp, 1,
                                   GFP_ATOMIC);
        }
 
index 3dd7ada..d09589a 100644 (file)
@@ -313,7 +313,6 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
        struct sctp_af *af;
        unsigned short snum;
        int ret = 0;
-       union sctp_addr tmp;
 
        /* Common sockaddr verification. */
        af = sctp_sockaddr_af(sp, addr, len);
@@ -369,8 +368,7 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
        sctp_write_lock(&ep->base.addr_lock);
 
        /* Use GFP_ATOMIC since BHs are disabled.  */
-       flip_to_h(&tmp, addr);
-       ret = sctp_add_bind_addr(bp, &tmp, 1, GFP_ATOMIC);
+       ret = sctp_add_bind_addr(bp, addr, 1, GFP_ATOMIC);
        sctp_write_unlock(&ep->base.addr_lock);
        sctp_local_bh_enable();
 
@@ -572,7 +570,6 @@ static int sctp_send_asconf_add_ip(struct sock              *sk,
                        addr = (union sctp_addr *)addr_buf;
                        af = sctp_get_af_specific(addr->v4.sin_family);
                        memcpy(&saveaddr, addr, af->sockaddr_len);
-                       saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port);
                        retval = sctp_add_bind_addr(bp, &saveaddr, 0,
                                                    GFP_ATOMIC);
                        addr_buf += af->sockaddr_len;