| From foo@baz Sat Apr 29 08:22:13 CEST 2017 |
| From: Xin Long <lucien.xin@gmail.com> |
| Date: Thu, 6 Apr 2017 13:10:52 +0800 |
| Subject: sctp: listen on the sock only when it's state is listening or closed |
| |
| From: Xin Long <lucien.xin@gmail.com> |
| |
| |
| [ Upstream commit 34b2789f1d9bf8dcca9b5cb553d076ca2cd898ee ] |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/sctp/socket.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/net/sctp/socket.c |
| +++ b/net/sctp/socket.c |
| @@ -6861,6 +6861,9 @@ int sctp_inet_listen(struct socket *sock |
| 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)) |