summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorVlad Yasevich <vyasevich@gmail.com>2014-10-03 18:16:20 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-10-15 08:31:57 +0200
commit2d435f096dd8618919b86c3575aeb0815bf799b4 (patch)
treec3da0733a91597cfaa50747ad5cb6c1d894dfe58 /include
parentae3b8ed5dadbb278498090b18ee70e6211ef2763 (diff)
downloadlwn-2d435f096dd8618919b86c3575aeb0815bf799b4.tar.gz
lwn-2d435f096dd8618919b86c3575aeb0815bf799b4.zip
sctp: handle association restarts when the socket is closed.
[ Upstream commit bdf6fa52f01b941d4a80372d56de465bdbbd1d23 ] Currently association restarts do not take into consideration the state of the socket. When a restart happens, the current assocation simply transitions into established state. This creates a condition where a remote system, through a the restart procedure, may create a local association that is no way reachable by user. The conditions to trigger this are as follows: 1) Remote does not acknoledge some data causing data to remain outstanding. 2) Local application calls close() on the socket. Since data is still outstanding, the association is placed in SHUTDOWN_PENDING state. However, the socket is closed. 3) The remote tries to create a new association, triggering a restart on the local system. The association moves from SHUTDOWN_PENDING to ESTABLISHED. At this point, it is no longer reachable by any socket on the local system. This patch addresses the above situation by moving the newly ESTABLISHED association into SHUTDOWN-SENT state and bundling a SHUTDOWN after the COOKIE-ACK chunk. This way, the restarted associate immidiately enters the shutdown procedure and forces the termination of the unreachable association. Reported-by: David Laight <David.Laight@aculab.com> Signed-off-by: Vlad Yasevich <vyasevich@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/net/sctp/command.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h
index 35247271e557..5f39c1cc0766 100644
--- a/include/net/sctp/command.h
+++ b/include/net/sctp/command.h
@@ -118,7 +118,7 @@ typedef enum {
* analysis of the state functions, but in reality just taken from
* thin air in the hopes othat we don't trigger a kernel panic.
*/
-#define SCTP_MAX_NUM_COMMANDS 14
+#define SCTP_MAX_NUM_COMMANDS 20
typedef union {
__s32 i32;