Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 41815
b: refs/heads/master
c: e2fcced
h: refs/heads/master
i:
  41813: 8a27d5c
  41811: 8eb57af
  41807: 4c8abe9
v: v3
  • Loading branch information
Al Viro authored and David S. Miller committed Dec 3, 2006
1 parent cad6c66 commit 1efff23
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1c7d1fc14974f44809b22521bd9796411d8ba440
refs/heads/master: e2fccedb0136205d02e97a41851503e2b96d2a17
11 changes: 4 additions & 7 deletions trunk/net/sctp/associola.c
Original file line number Diff line number Diff line change
Expand Up @@ -927,19 +927,16 @@ struct sctp_transport *sctp_assoc_is_match(struct sctp_association *asoc,
const union sctp_addr *paddr)
{
struct sctp_transport *transport;
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, &tmp2);
if ((htons(asoc->base.bind_addr.port) == laddr->v4.sin_port) &&
(htons(asoc->peer.port) == paddr->v4.sin_port)) {
transport = sctp_assoc_lookup_paddr(asoc, paddr);
if (!transport)
goto out;

if (sctp_bind_addr_match(&asoc->base.bind_addr, &tmp,
if (sctp_bind_addr_match(&asoc->base.bind_addr, laddr,
sctp_sk(asoc->base.sk)))
goto out;
}
Expand Down
23 changes: 16 additions & 7 deletions trunk/net/sctp/input.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ int sctp_rcv(struct sk_buff *skb)
struct sctphdr *sh;
union sctp_addr src;
union sctp_addr dest;
union sctp_addr tmp;
union sctp_addr tmp, tmp2;
int family;
struct sctp_af *af;

Expand Down Expand Up @@ -179,9 +179,10 @@ int sctp_rcv(struct sk_buff *skb)
!af->addr_valid(&dest, NULL, skb))
goto discard_it;

asoc = __sctp_rcv_lookup(skb, &src, &dest, &transport);

flip_to_n(&tmp, &dest);
flip_to_n(&tmp2, &src);

asoc = __sctp_rcv_lookup(skb, &tmp2, &tmp, &transport);

if (!asoc)
ep = __sctp_rcv_lookup_endpoint(&tmp);
Expand Down Expand Up @@ -443,6 +444,7 @@ 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;

Expand All @@ -454,11 +456,13 @@ 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(&saddr, &daddr, &transport);
asoc = __sctp_lookup_association(&tmp, &tmp2, &transport);
if (!asoc)
return NULL;

Expand Down Expand Up @@ -833,7 +837,7 @@ static struct sctp_association *__sctp_lookup_association(
/* Optimize here for direct hit, only listening connections can
* have wildcards anyways.
*/
hash = sctp_assoc_hashfn(local->v4.sin_port, peer->v4.sin_port);
hash = sctp_assoc_hashfn(ntohs(local->v4.sin_port), ntohs(peer->v4.sin_port));
head = &sctp_assoc_hashtable[hash];
read_lock(&head->lock);
for (epb = head->chain; epb; epb = epb->next) {
Expand Down Expand Up @@ -875,8 +879,11 @@ int sctp_has_association(const union sctp_addr *laddr,
{
struct sctp_association *asoc;
struct sctp_transport *transport;
union sctp_addr tmp, tmp2;
flip_to_n(&tmp, laddr);
flip_to_n(&tmp2, paddr);

if ((asoc = sctp_lookup_association(laddr, paddr, &transport))) {
if ((asoc = sctp_lookup_association(&tmp, &tmp2, &transport))) {
sctp_association_put(asoc);
return 1;
}
Expand Down Expand Up @@ -914,6 +921,7 @@ static struct sctp_association *__sctp_rcv_init_lookup(struct sk_buff *skb,
sctp_init_chunk_t *init;
struct sctp_transport *transport;
struct sctp_af *af;
union sctp_addr tmp2;

ch = (sctp_chunkhdr_t *) skb->data;

Expand Down Expand Up @@ -961,8 +969,9 @@ static struct sctp_association *__sctp_rcv_init_lookup(struct sk_buff *skb,
continue;

af->from_addr_param(paddr, params.addr, ntohs(sh->source), 0);
flip_to_n(&tmp2, paddr);

asoc = __sctp_lookup_association(laddr, paddr, &transport);
asoc = __sctp_lookup_association(laddr, &tmp2, &transport);
if (asoc)
return asoc;
}
Expand Down

0 comments on commit 1efff23

Please sign in to comment.