diff --git a/net/sctp/input.c b/net/sctp/input.c index 0e5ac5e42c96bd6712a3887e472eaaf579ffdbc9..3b4a552c9f18a4ce7cc7b3d5dbaf6ab7430139fb 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -127,7 +127,6 @@ int sctp_rcv(struct sk_buff *skb) struct sctphdr *sh; union sctp_addr src; union sctp_addr dest; - union sctp_addr tmp, tmp2; int family; struct sctp_af *af; @@ -179,13 +178,10 @@ int sctp_rcv(struct sk_buff *skb) !af->addr_valid(&dest, NULL, skb)) goto discard_it; - flip_to_n(&tmp, &dest); - flip_to_n(&tmp2, &src); - - asoc = __sctp_rcv_lookup(skb, &tmp2, &tmp, &transport); + asoc = __sctp_rcv_lookup(skb, &src, &dest, &transport); if (!asoc) - ep = __sctp_rcv_lookup_endpoint(&tmp); + ep = __sctp_rcv_lookup_endpoint(&dest); /* Retrieve the common input handling substructure. */ rcvr = asoc ? &asoc->base : &ep->base; @@ -245,7 +241,7 @@ int sctp_rcv(struct sk_buff *skb) chunk->sctp_hdr = sh; /* Set the source and destination addresses of the incoming chunk. */ - sctp_init_addrs(chunk, &tmp2, &tmp); + sctp_init_addrs(chunk, &src, &dest); /* Remember where we came from. */ chunk->transport = transport; @@ -444,7 +440,6 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb, struct sock *sk = NULL; struct sctp_association *asoc; struct sctp_transport *transport = NULL; - union sctp_addr tmp, tmp2; *app = NULL; *tpp = NULL; @@ -456,13 +451,11 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb, /* Initialize local addresses for lookups. */ af->from_skb(&saddr, skb, 1); af->from_skb(&daddr, skb, 0); - flip_to_n(&tmp, &saddr); - flip_to_n(&tmp2, &daddr); /* Look for an association that matches the incoming ICMP error * packet. */ - asoc = __sctp_lookup_association(&tmp, &tmp2, &transport); + asoc = __sctp_lookup_association(&saddr, &daddr, &transport); if (!asoc) return NULL; diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index 6139d1d964ebcff68b9748c16d78781efffee3f9..d6b585b85cbb40673580f2b124e986b3270af030 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c @@ -351,7 +351,7 @@ static void sctp_v6_from_skb(union sctp_addr *addr,struct sk_buff *skb, int is_saddr) { void *from; - __u16 *port; + __be16 *port; struct sctphdr *sh; port = &addr->v6.sin6_port; @@ -361,10 +361,10 @@ static void sctp_v6_from_skb(union sctp_addr *addr,struct sk_buff *skb, sh = (struct sctphdr *) skb->h.raw; if (is_saddr) { - *port = ntohs(sh->source); + *port = sh->source; from = &skb->nh.ipv6h->saddr; } else { - *port = ntohs(sh->dest); + *port = sh->dest; from = &skb->nh.ipv6h->daddr; } ipv6_addr_copy(&addr->v6.sin6_addr, from); diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index d1fbd1f5c6d16a28bab3daffbced1037f1915f71..d08bafd4439e6ac5031f67569ddd69b21274ec01 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c @@ -252,7 +252,7 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb, int is_saddr) { void *from; - __u16 *port; + __be16 *port; struct sctphdr *sh; port = &addr->v4.sin_port; @@ -260,10 +260,10 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb, sh = (struct sctphdr *) skb->h.raw; if (is_saddr) { - *port = ntohs(sh->source); + *port = sh->source; from = &skb->nh.iph->saddr; } else { - *port = ntohs(sh->dest); + *port = sh->dest; from = &skb->nh.iph->daddr; } memcpy(&addr->v4.sin_addr.s_addr, from, sizeof(struct in_addr)); diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index 59536368f79a680f749d69438944cc6bf9fb86d4..632a1159610e79112c7fec62c3d7ba72c9f08792 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c @@ -1227,7 +1227,6 @@ struct sctp_association *sctp_make_temp_asoc(const struct sctp_endpoint *ep, struct sk_buff *skb; sctp_scope_t scope; struct sctp_af *af; - union sctp_addr tmp; /* Create the bare association. */ scope = sctp_scope(sctp_source(chunk)); @@ -1240,8 +1239,7 @@ struct sctp_association *sctp_make_temp_asoc(const struct sctp_endpoint *ep, af = sctp_get_af_specific(ipver2af(skb->nh.iph->version)); if (unlikely(!af)) goto fail; - af->from_skb(&tmp, skb, 1); - flip_to_n(&asoc->c.peer_addr, &tmp); + af->from_skb(&asoc->c.peer_addr, skb, 1); nodata: return asoc;