Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 78834
b: refs/heads/master
c: 8528819
h: refs/heads/master
v: v3
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Jan 28, 2008
1 parent 45357d1 commit af4e039
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 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: 112f35c9c164e06e038d506dd3eb15e76829ef8a
refs/heads/master: 8528819adc613e0b4bc3e5cb4123b4b33d2b03c4
23 changes: 12 additions & 11 deletions trunk/net/netfilter/nf_conntrack_proto_sctp.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,7 @@ static int sctp_packet(struct nf_conn *ct,
unsigned int hooknum)
{
enum sctp_conntrack newconntrack, oldsctpstate;
enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo);
sctp_sctphdr_t _sctph, *sh;
sctp_chunkhdr_t _sch, *sch;
u_int32_t offset, count;
Expand All @@ -318,7 +319,7 @@ static int sctp_packet(struct nf_conn *ct,
!test_bit(SCTP_CID_COOKIE_ECHO, map) &&
!test_bit(SCTP_CID_ABORT, map) &&
!test_bit(SCTP_CID_SHUTDOWN_ACK, map) &&
sh->vtag != ct->proto.sctp.vtag[CTINFO2DIR(ctinfo)]) {
sh->vtag != ct->proto.sctp.vtag[dir]) {
pr_debug("Verification tag check failed\n");
return -1;
}
Expand All @@ -336,35 +337,35 @@ static int sctp_packet(struct nf_conn *ct,
}
} else if (sch->type == SCTP_CID_ABORT) {
/* Sec 8.5.1 (B) */
if (sh->vtag != ct->proto.sctp.vtag[CTINFO2DIR(ctinfo)] &&
sh->vtag != ct->proto.sctp.vtag[1 - CTINFO2DIR(ctinfo)]) {
if (sh->vtag != ct->proto.sctp.vtag[dir] &&
sh->vtag != ct->proto.sctp.vtag[!dir]) {
write_unlock_bh(&sctp_lock);
return -1;
}
} else if (sch->type == SCTP_CID_SHUTDOWN_COMPLETE) {
/* Sec 8.5.1 (C) */
if (sh->vtag != ct->proto.sctp.vtag[CTINFO2DIR(ctinfo)] &&
sh->vtag != ct->proto.sctp.vtag[1 - CTINFO2DIR(ctinfo)] &&
if (sh->vtag != ct->proto.sctp.vtag[dir] &&
sh->vtag != ct->proto.sctp.vtag[!dir] &&
(sch->flags & 1)) {
write_unlock_bh(&sctp_lock);
return -1;
}
} else if (sch->type == SCTP_CID_COOKIE_ECHO) {
/* Sec 8.5.1 (D) */
if (sh->vtag != ct->proto.sctp.vtag[CTINFO2DIR(ctinfo)]) {
if (sh->vtag != ct->proto.sctp.vtag[dir]) {
write_unlock_bh(&sctp_lock);
return -1;
}
}

oldsctpstate = ct->proto.sctp.state;
newconntrack = new_state(CTINFO2DIR(ctinfo), oldsctpstate, sch->type);
newconntrack = new_state(dir, oldsctpstate, sch->type);

/* Invalid */
if (newconntrack == SCTP_CONNTRACK_MAX) {
pr_debug("nf_conntrack_sctp: Invalid dir=%i ctype=%u "
"conntrack=%u\n",
CTINFO2DIR(ctinfo), sch->type, oldsctpstate);
dir, sch->type, oldsctpstate);
write_unlock_bh(&sctp_lock);
return -1;
}
Expand All @@ -381,8 +382,8 @@ static int sctp_packet(struct nf_conn *ct,
return -1;
}
pr_debug("Setting vtag %x for dir %d\n",
ih->init_tag, !CTINFO2DIR(ctinfo));
ct->proto.sctp.vtag[!CTINFO2DIR(ctinfo)] = ih->init_tag;
ih->init_tag, !dir);
ct->proto.sctp.vtag[!dir] = ih->init_tag;
}

ct->proto.sctp.state = newconntrack;
Expand All @@ -394,7 +395,7 @@ static int sctp_packet(struct nf_conn *ct,
nf_ct_refresh_acct(ct, ctinfo, skb, *sctp_timeouts[newconntrack]);

if (oldsctpstate == SCTP_CONNTRACK_COOKIE_ECHOED &&
CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY &&
dir == IP_CT_DIR_REPLY &&
newconntrack == SCTP_CONNTRACK_ESTABLISHED) {
pr_debug("Setting assured bit\n");
set_bit(IPS_ASSURED_BIT, &ct->status);
Expand Down

0 comments on commit af4e039

Please sign in to comment.