The branch master has been updated via 3119ab3c9e6d211c461a245f3744893e17b6c193 (commit) via 8450d0c784f8cec58e1b41c79fb3836b9f2acd5e (commit) from 514c9da48b860153079748b0d588cd42191f0b6a (commit)
- Log ----------------------------------------------------------------- commit 3119ab3c9e6d211c461a245f3744893e17b6c193 Author: Matt Caswell <m...@openssl.org> Date: Fri Apr 19 13:55:08 2019 +0100 Fix error in BIO_get_ktls_send() and BIO_get_ktls_recv() If we were using a different type of BIO than a socket BIO then BIO_get_ktls_send() and BIO_get_ktls_recv() could return the wrong result. The above occurred even if KTLS was disabled at compile time - so we should additionally ensure that those macros do nothing if KTLS is disabled. Finally we make the logic in ssl3_get_record() a little more robust when KTLS has been disabled. [extended tests] Reviewed-by: Paul Dale <paul.d...@oracle.com> (Merged from https://github.com/openssl/openssl/pull/8793) commit 8450d0c784f8cec58e1b41c79fb3836b9f2acd5e Author: Matt Caswell <m...@openssl.org> Date: Fri Apr 19 13:53:56 2019 +0100 Fix KTLS compilation error If the kernel headers are sufficiently recent to have KTLS transmit support, but not recent enough to have KTLS receive support then a compilation error would be the result. Reviewed-by: Paul Dale <paul.d...@oracle.com> (Merged from https://github.com/openssl/openssl/pull/8793) ----------------------------------------------------------------------- Summary of changes: include/internal/ktls.h | 4 ++++ include/openssl/bio.h | 15 +++++++++++---- ssl/record/ssl3_record.c | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/internal/ktls.h b/include/internal/ktls.h index 5495a8d..d7bd1f3 100644 --- a/include/internal/ktls.h +++ b/include/internal/ktls.h @@ -90,6 +90,10 @@ static ossl_inline int ktls_read_record(int fd, void *data, size_t length) # define TCP_ULP 31 # endif +# ifndef TLS_RX +# define TLS_RX 2 +# endif + /* * When successful, this socket option doesn't change the behaviour of the * TCP socket, except changing the TCP setsockopt handler to enable the diff --git a/include/openssl/bio.h b/include/openssl/bio.h index 85cbe0a..66e0b96 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h @@ -152,13 +152,20 @@ extern "C" { * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 */ -# define BIO_CTRL_GET_KTLS_SEND 73 -# define BIO_CTRL_GET_KTLS_RECV 76 +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 +# ifndef OPENSSL_NO_KTLS # define BIO_get_ktls_send(b) \ - BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) + (BIO_method_type(b) == BIO_TYPE_SOCKET \ + && BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL)) # define BIO_get_ktls_recv(b) \ - BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) + (BIO_method_type(b) == BIO_TYPE_SOCKET \ + && BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL)) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif /* modifiers */ # define BIO_FP_READ 0x02 diff --git a/ssl/record/ssl3_record.c b/ssl/record/ssl3_record.c index 24694b3..f758f17 100644 --- a/ssl/record/ssl3_record.c +++ b/ssl/record/ssl3_record.c @@ -211,9 +211,9 @@ int ssl3_get_record(SSL *s) SSL3_BUFFER_get_len(rbuf), 0, num_recs == 0 ? 1 : 0, &n); if (rret <= 0) { +#ifndef OPENSSL_NO_KTLS if (!BIO_get_ktls_recv(s->rbio)) return rret; /* error or non-blocking */ -#ifndef OPENSSL_NO_KTLS switch (errno) { case EBADMSG: SSLfatal(s, SSL_AD_BAD_RECORD_MAC, @@ -233,8 +233,8 @@ int ssl3_get_record(SSL *s) default: break; } - return rret; #endif + return rret; } RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY);