[openssl] master update

Matt Caswell matt at openssl.org
Wed Feb 10 09:28:47 UTC 2021


The branch master has been updated
       via  dfcfd17f2818cf520ce6381aed9ec3d2fc12170d (commit)
      from  3bc0b621a7baf1a11bc5cad69a287ad093674d68 (commit)


- Log -----------------------------------------------------------------
commit dfcfd17f2818cf520ce6381aed9ec3d2fc12170d
Author: Oleksandr Tymoshenko <gonzo at bluezbox.com>
Date:   Sun Dec 20 11:01:53 2020 -0800

    Handle partial data re-sending on ktls/sendfile on FreeBSD
    
    Add a handler for EBUSY sendfile error in addition to
    EAGAIN. With EBUSY returned the data still can be partially
    sent and user code has to be notified about it, otherwise it
    may try to send data multiple times.
    
    Reviewed-by: Ben Kaduk <kaduk at mit.edu>
    Reviewed-by: Matt Caswell <matt at openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/13716)

-----------------------------------------------------------------------

Summary of changes:
 doc/man3/SSL_write.pod  | 3 ++-
 include/internal/ktls.h | 9 +++------
 2 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/doc/man3/SSL_write.pod b/doc/man3/SSL_write.pod
index 06bd368c46..9a5a6f0744 100644
--- a/doc/man3/SSL_write.pod
+++ b/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/include/internal/ktls.h b/include/internal/ktls.h
index 135f953ca2..1f486e7b48 100644
--- a/include/internal/ktls.h
+++ b/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;
 }
 


More information about the openssl-commits mailing list