From mboxrd@z Thu Jan 1 00:00:00 1970 From: Doron Roberts-Kedes Subject: [PATCH net] tls: check RCV_SHUTDOWN in tls_wait_data Date: Wed, 18 Jul 2018 16:22:27 -0700 Message-ID: <20180718232227.4083740-1-doronrk@fb.com> Mime-Version: 1.0 Content-Type: text/plain Cc: Dave Watson , , Doron Roberts-Kedes To: "David S . Miller" Return-path: Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:34300 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731034AbeGSAC5 (ORCPT ); Wed, 18 Jul 2018 20:02:57 -0400 Received: from pps.filterd (m0001303.ppops.net [127.0.0.1]) by m0001303.ppops.net (8.16.0.22/8.16.0.22) with SMTP id w6INMGRb018000 for ; Wed, 18 Jul 2018 16:22:45 -0700 Received: from mail.thefacebook.com ([199.201.64.23]) by m0001303.ppops.net with ESMTP id 2ka96114dm-2 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Wed, 18 Jul 2018 16:22:45 -0700 Sender: netdev-owner@vger.kernel.org List-ID: The current code does not check sk->sk_shutdown & RCV_SHUTDOWN. tls_sw_recvmsg may return a positive value in the case where bytes have already been copied when the socket is shutdown. sk->sk_err has been cleared, causing the tls_wait_data to hang forever on a subsequent invocation. Checking sk->sk_shutdown & RCV_SHUTDOWN, as in tcp_recvmsg, fixes this problem. Fixes: c46234ebb4d1 ("tls: RX path for ktls") Acked-by: Dave Watson Signed-off-by: Doron Roberts-Kedes --- net/tls/tls_sw.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index ef15e35232dd..f90c4391f859 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -647,6 +647,9 @@ static struct sk_buff *tls_wait_data(struct sock *sk, int flags, return NULL; } + if (sk->sk_shutdown & RCV_SHUTDOWN) + return NULL; + if (sock_flag(sk, SOCK_DONE)) return NULL; -- 2.17.1