aboutsummaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
Diffstat (limited to 'crypto')
-rw-r--r--crypto/openssl/doc/man3/SSL_write.pod3
-rw-r--r--crypto/openssl/include/internal/ktls.h9
2 files changed, 5 insertions, 7 deletions
diff --git a/crypto/openssl/doc/man3/SSL_write.pod b/crypto/openssl/doc/man3/SSL_write.pod
index 20c7953deb06..9b271d8e65a2 100644
--- a/crypto/openssl/doc/man3/SSL_write.pod
+++ b/crypto/openssl/doc/man3/SSL_write.pod
@@ -120,7 +120,8 @@ For SSL_sendfile(), the following return values can occur:
=item Z<>>= 0
The write operation was successful, the return value is the number
-of bytes of the file written to the TLS/SSL connection.
+of bytes of the file written to the TLS/SSL connection. The return
+value can be less than B<size> for a partial write.
=item E<lt> 0
diff --git a/crypto/openssl/include/internal/ktls.h b/crypto/openssl/include/internal/ktls.h
index 9032c0ed6174..622d7be76d1e 100644
--- a/crypto/openssl/include/internal/ktls.h
+++ b/crypto/openssl/include/internal/ktls.h
@@ -192,15 +192,12 @@ static ossl_inline int ktls_read_record(int fd, void *data, size_t length)
static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off,
size_t size, int flags)
{
- off_t sbytes;
+ off_t sbytes = 0;
int ret;
ret = sendfile(fd, s, off, size, NULL, &sbytes, flags);
- if (ret == -1) {
- if (errno == EAGAIN && sbytes != 0)
- return sbytes;
- return -1;
- }
+ if (ret == -1 && sbytes == 0)
+ return -1;
return sbytes;
}