[SCTP]: Switch sctp_assoc_lookup_paddr() to net-endian.
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 21 Nov 2006 01:07:06 +0000 (17:07 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Sun, 3 Dec 2006 05:26:37 +0000 (21:26 -0800)
Callers updated.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/associola.c
net/sctp/endpointola.c
net/sctp/sm_make_chunk.c
net/sctp/sm_statefuns.c
net/sctp/socket.c

index ab3141f05921ab032630cb83c19b61cd597fa531..3be8b6081a156a83fcd3c3efa708a412820d6c9f 100644 (file)
@@ -533,6 +533,8 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
        struct sctp_transport *peer;
        struct sctp_sock *sp;
        unsigned short port;
+       union sctp_addr tmp;
+       flip_to_n(&tmp, addr);
 
        sp = sctp_sk(asoc->base.sk);
 
@@ -551,7 +553,7 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
                asoc->peer.port = port;
 
        /* Check to see if this is a duplicate. */
-       peer = sctp_assoc_lookup_paddr(asoc, addr);
+       peer = sctp_assoc_lookup_paddr(asoc, &tmp);
        if (peer) {
                if (peer->state == SCTP_UNKNOWN) {
                        if (peer_state == SCTP_ACTIVE)
@@ -684,14 +686,12 @@ struct sctp_transport *sctp_assoc_lookup_paddr(
 {
        struct sctp_transport *t;
        struct list_head *pos;
-       union sctp_addr tmp;
 
-       flip_to_n(&tmp, address);
        /* Cycle through all transports searching for a peer address. */
 
        list_for_each(pos, &asoc->peer.transport_addr_list) {
                t = list_entry(pos, struct sctp_transport, transports);
-               if (sctp_cmp_addr_exact(&tmp, &t->ipaddr))
+               if (sctp_cmp_addr_exact(address, &t->ipaddr))
                        return t;
        }
 
@@ -927,14 +927,15 @@ struct sctp_transport *sctp_assoc_is_match(struct sctp_association *asoc,
                                           const union sctp_addr *paddr)
 {
        struct sctp_transport *transport;
-       union sctp_addr tmp;
+       union sctp_addr tmp, tmp2;
        flip_to_n(&tmp, laddr);
+       flip_to_n(&tmp2, paddr);
 
        sctp_read_lock(&asoc->base.addr_lock);
 
        if ((asoc->base.bind_addr.port == laddr->v4.sin_port) &&
            (asoc->peer.port == paddr->v4.sin_port)) {
-               transport = sctp_assoc_lookup_paddr(asoc, paddr);
+               transport = sctp_assoc_lookup_paddr(asoc, &tmp2);
                if (!transport)
                        goto out;
 
@@ -1047,7 +1048,7 @@ void sctp_assoc_update(struct sctp_association *asoc,
        /* Remove any peer addresses not present in the new association. */
        list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
                trans = list_entry(pos, struct sctp_transport, transports);
-               if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr_h))
+               if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr))
                        sctp_assoc_del_peer(asoc, &trans->ipaddr);
        }
 
@@ -1071,7 +1072,7 @@ void sctp_assoc_update(struct sctp_association *asoc,
                list_for_each(pos, &new->peer.transport_addr_list) {
                        trans = list_entry(pos, struct sctp_transport,
                                           transports);
-                       if (!sctp_assoc_lookup_paddr(asoc, &trans->ipaddr_h))
+                       if (!sctp_assoc_lookup_paddr(asoc, &trans->ipaddr))
                                sctp_assoc_add_peer(asoc, &trans->ipaddr_h,
                                                    GFP_ATOMIC, trans->state);
                }
index d77fe9232dd1c0ec383a71a7a054a9c6d3cafada..7c781d6636033a521eaeeb49b8b7325da0e9b43c 100644 (file)
@@ -259,6 +259,8 @@ static struct sctp_association *__sctp_endpoint_lookup_assoc(
        int rport;
        struct sctp_association *asoc;
        struct list_head *pos;
+       union sctp_addr tmp;
+       flip_to_n(&tmp, paddr);
 
        rport = paddr->v4.sin_port;
 
@@ -266,7 +268,7 @@ static struct sctp_association *__sctp_endpoint_lookup_assoc(
                asoc = list_entry(pos, struct sctp_association, asocs);
                if (rport == asoc->peer.port) {
                        sctp_read_lock(&asoc->base.addr_lock);
-                       *transport = sctp_assoc_lookup_paddr(asoc, paddr);
+                       *transport = sctp_assoc_lookup_paddr(asoc, &tmp);
                        sctp_read_unlock(&asoc->base.addr_lock);
 
                        if (*transport)
index 303830b40ab30db103aaf8b49bcf42370ae8242c..cc1b01152c348044eb658d217b240fba780bfd0d 100644 (file)
@@ -2466,7 +2466,7 @@ static __be16 sctp_process_asconf_param(struct sctp_association *asoc,
                sctp_assoc_del_peer(asoc, &tmp_addr);
                break;
        case SCTP_PARAM_SET_PRIMARY:
-               peer = sctp_assoc_lookup_paddr(asoc, &addr);
+               peer = sctp_assoc_lookup_paddr(asoc, &tmp_addr);
                if (!peer)
                        return SCTP_ERROR_INV_PARAM;
 
index ac776fd206673fda28cf16bd9df834ee691666c5..7d722f5a31d7b636524b5f5377cbed494d8aeb26 100644 (file)
@@ -1018,6 +1018,7 @@ sctp_disposition_t sctp_sf_backbeat_8_3(const struct sctp_endpoint *ep,
        struct sctp_transport *link;
        sctp_sender_hb_info_t *hbinfo;
        unsigned long max_interval;
+       union sctp_addr tmp;
 
        if (!sctp_vtag_verify(chunk, asoc))
                return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
@@ -1035,7 +1036,8 @@ sctp_disposition_t sctp_sf_backbeat_8_3(const struct sctp_endpoint *ep,
        }
 
        from_addr = hbinfo->daddr;
-       link = sctp_assoc_lookup_paddr(asoc, &from_addr);
+       flip_to_n(&tmp, &from_addr);
+       link = sctp_assoc_lookup_paddr(asoc, &tmp);
 
        /* This should never happen, but lets log it if so.  */
        if (unlikely(!link)) {
index d42953efa3557e8d31f64e939c8d3c7b85fc79f6..ffdad8e842ac2cddecf42c10d29d408af182623e 100644 (file)
@@ -1370,7 +1370,7 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
        struct sctp_association *new_asoc=NULL, *asoc=NULL;
        struct sctp_transport *transport, *chunk_tp;
        struct sctp_chunk *chunk;
-       union sctp_addr to;
+       union sctp_addr to, tmp;
        struct sockaddr *msg_name = NULL;
        struct sctp_sndrcvinfo default_sinfo = { 0 };
        struct sctp_sndrcvinfo *sinfo;
@@ -1424,6 +1424,7 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
                if (msg_namelen > sizeof(to))
                        msg_namelen = sizeof(to);
                memcpy(&to, msg->msg_name, msg_namelen);
+               memcpy(&tmp, msg->msg_name, msg_namelen);
                SCTP_DEBUG_PRINTK("Just memcpy'd. msg_name is "
                                  "0x%x:%u.\n",
                                  to.v4.sin_addr.s_addr, to.v4.sin_port);
@@ -1691,7 +1692,7 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
         */
        if ((sctp_style(sk, TCP) && msg_name) ||
            (sinfo_flags & SCTP_ADDR_OVER)) {
-               chunk_tp = sctp_assoc_lookup_paddr(asoc, &to);
+               chunk_tp = sctp_assoc_lookup_paddr(asoc, &tmp);
                if (!chunk_tp) {
                        err = -EINVAL;
                        goto out_free;