diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 895eda3d79e8b..947c0d962dbac 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2220,6 +2220,10 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, pr_debug("block timeout %ld", timeo); sk_wait_data(sk, &timeo, NULL); + if (unlikely(sk->sk_state == TCP_LISTEN)) { + copied = copied ? : -ENOTCONN; + goto out_release; + } } out_err: @@ -2240,6 +2244,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, if (!(flags & MSG_PEEK)) mptcp_rcv_space_adjust(msk, copied); +out_release: release_sock(sk); return copied; }