stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, David Laight <David.Laight@aculab.com>,
	Vlad Yasevich <vyasevich@gmail.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 3.17 05/25] sctp: handle association restarts when the socket is closed.
Date: Mon, 13 Oct 2014 04:24:58 +0200	[thread overview]
Message-ID: <20141013022454.512413879@linuxfoundation.org> (raw)
In-Reply-To: <20141013022454.289398272@linuxfoundation.org>

3.17-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Vlad Yasevich <vyasevich@gmail.com>

[ 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>
---
 include/net/sctp/command.h |    2 +-
 net/sctp/sm_statefuns.c    |   19 ++++++++++++++++---
 2 files changed, 17 insertions(+), 4 deletions(-)

--- a/include/net/sctp/command.h
+++ b/include/net/sctp/command.h
@@ -115,7 +115,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 {
 	void *zero_all;	/* Set to NULL to clear the entire union */
--- a/net/sctp/sm_statefuns.c
+++ b/net/sctp/sm_statefuns.c
@@ -1775,9 +1775,22 @@ static sctp_disposition_t sctp_sf_do_dup
 	/* Update the content of current association. */
 	sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_ASSOC, SCTP_ASOC(new_asoc));
 	sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev));
-	sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
-			SCTP_STATE(SCTP_STATE_ESTABLISHED));
-	sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
+	if (sctp_state(asoc, SHUTDOWN_PENDING) &&
+	    (sctp_sstate(asoc->base.sk, CLOSING) ||
+	     sock_flag(asoc->base.sk, SOCK_DEAD))) {
+		/* if were currently in SHUTDOWN_PENDING, but the socket
+		 * has been closed by user, don't transition to ESTABLISHED.
+		 * Instead trigger SHUTDOWN bundled with COOKIE_ACK.
+		 */
+		sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
+		return sctp_sf_do_9_2_start_shutdown(net, ep, asoc,
+						     SCTP_ST_CHUNK(0), NULL,
+						     commands);
+	} else {
+		sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
+				SCTP_STATE(SCTP_STATE_ESTABLISHED));
+		sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
+	}
 	return SCTP_DISPOSITION_CONSUME;
 
 nomem_ev:



  parent reply	other threads:[~2014-10-13  2:24 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-13  2:24 [PATCH 3.17 00/25] 3.17.1-stable review Greg Kroah-Hartman
2014-10-13  2:24 ` [PATCH 3.17 01/25] ip6_gre: fix flowi6_proto value in xmit path Greg Kroah-Hartman
2014-10-13  2:24 ` [PATCH 3.17 02/25] net: systemport: fix bcm_sysport_insert_tsb() Greg Kroah-Hartman
2014-10-13  2:24 ` [PATCH 3.17 03/25] team: avoid race condition in scheduling delayed work Greg Kroah-Hartman
2014-10-13  2:24 ` [PATCH 3.17 04/25] hyperv: Fix a bug in netvsc_send() Greg Kroah-Hartman
2014-10-13  2:24 ` Greg Kroah-Hartman [this message]
2014-10-13  2:24 ` [PATCH 3.17 06/25] 3c59x: fix bad split of cpu_to_le32(pci_map_single()) Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 07/25] net_sched: copy exts->type in tcf_exts_change() Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 08/25] irq_work: Introduce arch_irq_work_has_interrupt() Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 09/25] irq_work: Force raised irq work to run on irq work interrupt Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 10/25] x86: Tell irq work about self IPI support Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 11/25] arm: " Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 12/25] PCI: pciehp: Fix wait time in timeout message Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 13/25] uas: Add a quirk for rejecting ATA_12 and ATA_16 commands Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 14/25] uas: Add no-report-opcodes quirk Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 15/25] uas: Add US_FL_NO_ATA_1X quirk for Seagate (0bc2:ab20) drives Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 16/25] uas: Add another ASM1051 usb-id to the uas blacklist Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 17/25] usb: gadget: f_fs: signedness bug in __ffs_func_bind_do_descs() Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 18/25] Revert "usb: gadget: composite: dequeue cdev->req before free it in composite_dev_cleanup" Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 19/25] USB: serial: cp210x: added Ketra N1 wireless interface support Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 20/25] USB: cp210x: add support for Seluxit USB dongle Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 21/25] usb: musb: dsps: kill OTG timer on suspend Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 22/25] USB: Add device quirk for ASUS T100 Base Station keyboard Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 23/25] crypto: caam - fix addressing of struct member Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 24/25] driver/base/node: remove unnecessary kfree of node struct from unregister_one_node Greg Kroah-Hartman
2014-10-13  2:25 ` [PATCH 3.17 25/25] serial: 8250: Add Quark X1000 to 8250_pci.c Greg Kroah-Hartman
2014-10-13 15:19 ` [PATCH 3.17 00/25] 3.17.1-stable review Guenter Roeck
2014-10-14  2:39   ` Greg Kroah-Hartman
2014-10-14  3:26     ` Greg Kroah-Hartman
2014-10-14 10:37       ` Satoru Takeuchi
2014-10-13 15:44 ` Romain Francoise
2014-10-13 15:57   ` Guenter Roeck
2014-10-13 21:03   ` George Spelvin
2014-10-14  1:27     ` Greg KH
2014-10-13 20:35 ` Shuah Khan
2014-10-14  2:40   ` Greg Kroah-Hartman
     [not found] ` <20141013112834.GA10826@khazad-dum.debian.net>
     [not found]   ` <20141013082319.175d90bb@as>
     [not found]     ` <20141119172235.GA31260@kroah.com>
     [not found]       ` <20141119194414.GN5050@linux.vnet.ibm.com>
2014-11-19 20:19         ` Holger Hoffstätte

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141013022454.512413879@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=David.Laight@aculab.com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=vyasevich@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).