@@ -1603,13 +1603,12 @@ int tls_sw_recvmsg(struct sock *sk,
copied = err;
}
- len = len - copied;
- if (len) {
- target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
- timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
- } else {
+ if (len <= copied)
goto recv_end;
- }
+
+ target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
+ len = len - copied;
+ timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
do {
bool retain_skb = false;
@@ -1715,7 +1714,7 @@ int tls_sw_recvmsg(struct sock *sk,
}
/* If we have a new message from strparser, continue now. */
- if (decrypted >= target && !ctx->recv_pkt)
+ if (decrypted + copied >= target && !ctx->recv_pkt)
break;
} while (len);