diff options
-rw-r--r-- | net/sctp/input.c | 15 | ||||
-rw-r--r-- | net/sctp/ipv6.c | 6 | ||||
-rw-r--r-- | net/sctp/protocol.c | 6 | ||||
-rw-r--r-- | net/sctp/sm_make_chunk.c | 4 |
4 files changed, 11 insertions, 20 deletions
diff --git a/net/sctp/input.c b/net/sctp/input.c index 0e5ac5e42c96..3b4a552c9f18 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c | |||
@@ -127,7 +127,6 @@ int sctp_rcv(struct sk_buff *skb) | |||
127 | struct sctphdr *sh; | 127 | struct sctphdr *sh; |
128 | union sctp_addr src; | 128 | union sctp_addr src; |
129 | union sctp_addr dest; | 129 | union sctp_addr dest; |
130 | union sctp_addr tmp, tmp2; | ||
131 | int family; | 130 | int family; |
132 | struct sctp_af *af; | 131 | struct sctp_af *af; |
133 | 132 | ||
@@ -179,13 +178,10 @@ int sctp_rcv(struct sk_buff *skb) | |||
179 | !af->addr_valid(&dest, NULL, skb)) | 178 | !af->addr_valid(&dest, NULL, skb)) |
180 | goto discard_it; | 179 | goto discard_it; |
181 | 180 | ||
182 | flip_to_n(&tmp, &dest); | 181 | asoc = __sctp_rcv_lookup(skb, &src, &dest, &transport); |
183 | flip_to_n(&tmp2, &src); | ||
184 | |||
185 | asoc = __sctp_rcv_lookup(skb, &tmp2, &tmp, &transport); | ||
186 | 182 | ||
187 | if (!asoc) | 183 | if (!asoc) |
188 | ep = __sctp_rcv_lookup_endpoint(&tmp); | 184 | ep = __sctp_rcv_lookup_endpoint(&dest); |
189 | 185 | ||
190 | /* Retrieve the common input handling substructure. */ | 186 | /* Retrieve the common input handling substructure. */ |
191 | rcvr = asoc ? &asoc->base : &ep->base; | 187 | rcvr = asoc ? &asoc->base : &ep->base; |
@@ -245,7 +241,7 @@ int sctp_rcv(struct sk_buff *skb) | |||
245 | chunk->sctp_hdr = sh; | 241 | chunk->sctp_hdr = sh; |
246 | 242 | ||
247 | /* Set the source and destination addresses of the incoming chunk. */ | 243 | /* Set the source and destination addresses of the incoming chunk. */ |
248 | sctp_init_addrs(chunk, &tmp2, &tmp); | 244 | sctp_init_addrs(chunk, &src, &dest); |
249 | 245 | ||
250 | /* Remember where we came from. */ | 246 | /* Remember where we came from. */ |
251 | chunk->transport = transport; | 247 | chunk->transport = transport; |
@@ -444,7 +440,6 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb, | |||
444 | struct sock *sk = NULL; | 440 | struct sock *sk = NULL; |
445 | struct sctp_association *asoc; | 441 | struct sctp_association *asoc; |
446 | struct sctp_transport *transport = NULL; | 442 | struct sctp_transport *transport = NULL; |
447 | union sctp_addr tmp, tmp2; | ||
448 | 443 | ||
449 | *app = NULL; *tpp = NULL; | 444 | *app = NULL; *tpp = NULL; |
450 | 445 | ||
@@ -456,13 +451,11 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb, | |||
456 | /* Initialize local addresses for lookups. */ | 451 | /* Initialize local addresses for lookups. */ |
457 | af->from_skb(&saddr, skb, 1); | 452 | af->from_skb(&saddr, skb, 1); |
458 | af->from_skb(&daddr, skb, 0); | 453 | af->from_skb(&daddr, skb, 0); |
459 | flip_to_n(&tmp, &saddr); | ||
460 | flip_to_n(&tmp2, &daddr); | ||
461 | 454 | ||
462 | /* Look for an association that matches the incoming ICMP error | 455 | /* Look for an association that matches the incoming ICMP error |
463 | * packet. | 456 | * packet. |
464 | */ | 457 | */ |
465 | asoc = __sctp_lookup_association(&tmp, &tmp2, &transport); | 458 | asoc = __sctp_lookup_association(&saddr, &daddr, &transport); |
466 | if (!asoc) | 459 | if (!asoc) |
467 | return NULL; | 460 | return NULL; |
468 | 461 | ||
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index 6139d1d964eb..d6b585b85cbb 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, | |||
351 | int is_saddr) | 351 | int is_saddr) |
352 | { | 352 | { |
353 | void *from; | 353 | void *from; |
354 | __u16 *port; | 354 | __be16 *port; |
355 | struct sctphdr *sh; | 355 | struct sctphdr *sh; |
356 | 356 | ||
357 | port = &addr->v6.sin6_port; | 357 | port = &addr->v6.sin6_port; |
@@ -361,10 +361,10 @@ static void sctp_v6_from_skb(union sctp_addr *addr,struct sk_buff *skb, | |||
361 | 361 | ||
362 | sh = (struct sctphdr *) skb->h.raw; | 362 | sh = (struct sctphdr *) skb->h.raw; |
363 | if (is_saddr) { | 363 | if (is_saddr) { |
364 | *port = ntohs(sh->source); | 364 | *port = sh->source; |
365 | from = &skb->nh.ipv6h->saddr; | 365 | from = &skb->nh.ipv6h->saddr; |
366 | } else { | 366 | } else { |
367 | *port = ntohs(sh->dest); | 367 | *port = sh->dest; |
368 | from = &skb->nh.ipv6h->daddr; | 368 | from = &skb->nh.ipv6h->daddr; |
369 | } | 369 | } |
370 | ipv6_addr_copy(&addr->v6.sin6_addr, from); | 370 | ipv6_addr_copy(&addr->v6.sin6_addr, from); |
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index d1fbd1f5c6d1..d08bafd4439e 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, | |||
252 | int is_saddr) | 252 | int is_saddr) |
253 | { | 253 | { |
254 | void *from; | 254 | void *from; |
255 | __u16 *port; | 255 | __be16 *port; |
256 | struct sctphdr *sh; | 256 | struct sctphdr *sh; |
257 | 257 | ||
258 | port = &addr->v4.sin_port; | 258 | port = &addr->v4.sin_port; |
@@ -260,10 +260,10 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb, | |||
260 | 260 | ||
261 | sh = (struct sctphdr *) skb->h.raw; | 261 | sh = (struct sctphdr *) skb->h.raw; |
262 | if (is_saddr) { | 262 | if (is_saddr) { |
263 | *port = ntohs(sh->source); | 263 | *port = sh->source; |
264 | from = &skb->nh.iph->saddr; | 264 | from = &skb->nh.iph->saddr; |
265 | } else { | 265 | } else { |
266 | *port = ntohs(sh->dest); | 266 | *port = sh->dest; |
267 | from = &skb->nh.iph->daddr; | 267 | from = &skb->nh.iph->daddr; |
268 | } | 268 | } |
269 | memcpy(&addr->v4.sin_addr.s_addr, from, sizeof(struct in_addr)); | 269 | 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 59536368f79a..632a1159610e 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, | |||
1227 | struct sk_buff *skb; | 1227 | struct sk_buff *skb; |
1228 | sctp_scope_t scope; | 1228 | sctp_scope_t scope; |
1229 | struct sctp_af *af; | 1229 | struct sctp_af *af; |
1230 | union sctp_addr tmp; | ||
1231 | 1230 | ||
1232 | /* Create the bare association. */ | 1231 | /* Create the bare association. */ |
1233 | scope = sctp_scope(sctp_source(chunk)); | 1232 | scope = sctp_scope(sctp_source(chunk)); |
@@ -1240,8 +1239,7 @@ struct sctp_association *sctp_make_temp_asoc(const struct sctp_endpoint *ep, | |||
1240 | af = sctp_get_af_specific(ipver2af(skb->nh.iph->version)); | 1239 | af = sctp_get_af_specific(ipver2af(skb->nh.iph->version)); |
1241 | if (unlikely(!af)) | 1240 | if (unlikely(!af)) |
1242 | goto fail; | 1241 | goto fail; |
1243 | af->from_skb(&tmp, skb, 1); | 1242 | af->from_skb(&asoc->c.peer_addr, skb, 1); |
1244 | flip_to_n(&asoc->c.peer_addr, &tmp); | ||
1245 | nodata: | 1243 | nodata: |
1246 | return asoc; | 1244 | return asoc; |
1247 | 1245 | ||