]> git.baikalelectronics.ru Git - kernel.git/commit
sctp: handle association restarts when the socket is closed.
authorVlad Yasevich <vyasevich@gmail.com>
Fri, 3 Oct 2014 22:16:20 +0000 (18:16 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Oct 2014 04:21:45 +0000 (00:21 -0400)
commit56a0a25436c2af06fda106e490a42eca2e7506d4
tree6f37046e3268e0123dd1abbe26065fa59c3b79d6
parentfa48efe9ac1505f2355d63ae3bffd488735d8a2b
sctp: handle association restarts when the socket is closed.

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>
include/net/sctp/command.h
net/sctp/sm_statefuns.c