diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index b0e9548f00bf..486b811f4a3f 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1316,6 +1316,13 @@ static void subflow_error_report(struct sock *ssk) { struct sock *sk = mptcp_subflow_ctx(ssk)->conn; + /* bail early if this is a no-op, so that we avoid introducing a + * problematic lockdep dependency between TCP accept queue lock + * and msk socket spinlock + */ + if (!sk->sk_socket) + return; + mptcp_data_lock(sk); if (!sock_owned_by_user(sk)) __mptcp_error_report(sk);