diff options
author | Gui Jianfeng <guijianfeng@cn.fujitsu.com> | 2008-04-12 21:39:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-04-12 21:39:34 -0400 |
commit | f4ad85ca3ef8a1ede76c5020a28a8f4057b4d24f (patch) | |
tree | cfab9dcd7b29eb150bd6168cf40c375bd9006bbe /net/sctp/outqueue.c | |
parent | 72da7b3860cabf427590b4982bc880bafab4d5c8 (diff) |
[SCTP]: Fix protocol violation when receiving an error lenght INIT-ACK
When receiving an error length INIT-ACK during COOKIE-WAIT,
a 0-vtag ABORT will be responsed. This action violates the
protocol apparently. This patch achieves the following things.
1 If the INIT-ACK contains all the fixed parameters, use init-tag
recorded from INIT-ACK as vtag.
2 If the INIT-ACK doesn't contain all the fixed parameters,
just reflect its vtag.
Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/outqueue.c')
-rw-r--r-- | net/sctp/outqueue.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 1bb3c5c35d2a..c0714469233c 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c | |||
@@ -793,6 +793,9 @@ int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout) | |||
793 | break; | 793 | break; |
794 | 794 | ||
795 | case SCTP_CID_ABORT: | 795 | case SCTP_CID_ABORT: |
796 | if (sctp_test_T_bit(chunk)) { | ||
797 | packet->vtag = asoc->c.my_vtag; | ||
798 | } | ||
796 | case SCTP_CID_SACK: | 799 | case SCTP_CID_SACK: |
797 | case SCTP_CID_HEARTBEAT: | 800 | case SCTP_CID_HEARTBEAT: |
798 | case SCTP_CID_HEARTBEAT_ACK: | 801 | case SCTP_CID_HEARTBEAT_ACK: |