Fix BIO_get_ktls_send() and BIO_get_ktls_recv() to work again.

This partially reverts 3119ab3c9e.  In the
case of a simple openssl s_server instance, the bio in s->wbio is a
BIO_TYPE_BUFFER BIO, not BIO_TYPE_SOCKET.  This caused all of the checks
to fail breaking KTLS.

The default return value of control methods I have looked it is zero
for unknown control requests, so invoking the control requests should
be returning 0 for non-socket BIOs already.

This does still map the requests to 0 at compile time for the non-KTLS
case so that the compiler can optimize the checks away entirely.

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/10045)
This commit is contained in:
John Baldwin 2019-08-23 16:42:48 -07:00 committed by Matt Caswell
parent 712c094293
commit 1ca50aa975

View File

@ -162,11 +162,9 @@ extern "C" {
# ifndef OPENSSL_NO_KTLS
# define BIO_get_ktls_send(b) \
(BIO_method_type(b) == BIO_TYPE_SOCKET \
&& BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL))
BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL)
# define BIO_get_ktls_recv(b) \
(BIO_method_type(b) == BIO_TYPE_SOCKET \
&& BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL))
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)