| From 52557dbc7538ecceb27ef2206719a47a8039a335 Mon Sep 17 00:00:00 2001 |
| From: Paolo Abeni <pabeni@redhat.com> |
| Date: Fri, 19 Feb 2021 18:35:40 +0100 |
| Subject: mptcp: do not wakeup listener for MPJ subflows |
| |
| From: Paolo Abeni <pabeni@redhat.com> |
| |
| commit 52557dbc7538ecceb27ef2206719a47a8039a335 upstream. |
| |
| MPJ subflows are not exposed as fds to user spaces. As such, |
| incoming MPJ subflows are removed from the accept queue by |
| tcp_check_req()/tcp_get_cookie_sock(). |
| |
| Later tcp_child_process() invokes subflow_data_ready() on the |
| parent socket regardless of the subflow kind, leading to poll |
| wakeups even if the later accept will block. |
| |
| Address the issue by double-checking the queue state before |
| waking the user-space. |
| |
| Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/164 |
| Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com> |
| Fixes: f296234c98a8 ("mptcp: Add handling of incoming MP_JOIN requests") |
| Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/mptcp/subflow.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/net/mptcp/subflow.c |
| +++ b/net/mptcp/subflow.c |
| @@ -1026,6 +1026,12 @@ static void subflow_data_ready(struct so |
| |
| msk = mptcp_sk(parent); |
| if (state & TCPF_LISTEN) { |
| + /* MPJ subflow are removed from accept queue before reaching here, |
| + * avoid stray wakeups |
| + */ |
| + if (reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue)) |
| + return; |
| + |
| set_bit(MPTCP_DATA_READY, &msk->flags); |
| parent->sk_data_ready(parent); |
| return; |