| From 485bc0f0d20494eb7a5302e8ece2535a8912b16f Mon Sep 17 00:00:00 2001 |
| From: Xin Long <lucien.xin@gmail.com> |
| Date: Thu, 6 Apr 2017 13:10:52 +0800 |
| Subject: [PATCH] sctp: listen on the sock only when it's state is listening or |
| closed |
| |
| commit 34b2789f1d9bf8dcca9b5cb553d076ca2cd898ee upstream. |
| |
| Now sctp doesn't check sock's state before listening on it. It could |
| even cause changing a sock with any state to become a listening sock |
| when doing sctp_listen. |
| |
| This patch is to fix it by checking sock's state in sctp_listen, so |
| that it will listen on the sock with right state. |
| |
| Reported-by: Andrey Konovalov <andreyknvl@google.com> |
| Tested-by: Andrey Konovalov <andreyknvl@google.com> |
| Signed-off-by: Xin Long <lucien.xin@gmail.com> |
| Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/sctp/socket.c b/net/sctp/socket.c |
| index 3908dec4ad30..ecb1a27dfd3f 100644 |
| --- a/net/sctp/socket.c |
| +++ b/net/sctp/socket.c |
| @@ -6852,6 +6852,9 @@ int sctp_inet_listen(struct socket *sock, int backlog) |
| if (sock->state != SS_UNCONNECTED) |
| goto out; |
| |
| + if (!sctp_sstate(sk, LISTENING) && !sctp_sstate(sk, CLOSED)) |
| + goto out; |
| + |
| /* If backlog is zero, disable listening. */ |
| if (!backlog) { |
| if (sctp_sstate(sk, CLOSED)) |
| -- |
| 2.12.0 |
| |