diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index f454e66fe2129..abf2534f4e093 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2403,10 +2403,10 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len, break; if (copied) { - if (sk->sk_err || + if (!timeo || + sk->sk_err || sk->sk_state == TCP_CLOSE || (sk->sk_shutdown & RCV_SHUTDOWN) || - !timeo || signal_pending(current)) break; } else {