diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index 78aedfc682ba84c62e2fb71ac09e605593c43f03..43dd0d82b6ed7af7f96b205bb17568adb9f687a7 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -1971,7 +1971,7 @@ int tls_sw_recvmsg(struct sock *sk,
 		goto end;
 
 	copied = err;
-	if (len <= copied)
+	if (len <= copied || (copied && control != TLS_RECORD_TYPE_DATA))
 		goto end;
 
 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);