Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 103067
b: refs/heads/master
c: 7115e63
h: refs/heads/master
i:
  103065: a7ef53a
  103063: 61e617c
v: v3
  • Loading branch information
Wei Yongjun authored and David S. Miller committed Jun 19, 2008
1 parent b38b4f5 commit d60ce6a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 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: 0344f1c66b544609e867bd24aa7bfa789dfa9830
refs/heads/master: 7115e632f90952454ab6426e0d2151327162a30f
27 changes: 25 additions & 2 deletions trunk/net/sctp/input.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,9 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb,
struct sock *sk = NULL;
struct sctp_association *asoc;
struct sctp_transport *transport = NULL;
struct sctp_init_chunk *chunkhdr;
__u32 vtag = ntohl(sctphdr->vtag);
int len = skb->len - ((void *)sctphdr - (void *)skb->data);

*app = NULL; *tpp = NULL;

Expand All @@ -451,8 +454,28 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb,

sk = asoc->base.sk;

if (ntohl(sctphdr->vtag) != asoc->c.peer_vtag) {
ICMP_INC_STATS_BH(ICMP_MIB_INERRORS);
/* RFC 4960, Appendix C. ICMP Handling
*
* ICMP6) An implementation MUST validate that the Verification Tag
* contained in the ICMP message matches the Verification Tag of
* the peer. If the Verification Tag is not 0 and does NOT
* match, discard the ICMP message. If it is 0 and the ICMP
* message contains enough bytes to verify that the chunk type is
* an INIT chunk and that the Initiate Tag matches the tag of the
* peer, continue with ICMP7. If the ICMP message is too short
* or the chunk type or the Initiate Tag does not match, silently
* discard the packet.
*/
if (vtag == 0) {
chunkhdr = (struct sctp_init_chunk *)((void *)sctphdr
+ sizeof(struct sctphdr));
if (len < sizeof(struct sctphdr) + sizeof(sctp_chunkhdr_t)
+ sizeof(__be32) ||
chunkhdr->chunk_hdr.type != SCTP_CID_INIT ||
ntohl(chunkhdr->init_hdr.init_tag) != asoc->c.my_vtag) {
goto out;
}
} else if (vtag != asoc->c.peer_vtag) {
goto out;
}

Expand Down

0 comments on commit d60ce6a

Please sign in to comment.