From f6b91f04edffced0b7c721968fe5fdc2c1177d5d Mon Sep 17 00:00:00 2001 From: Chris Conlon Date: Fri, 20 Aug 2021 14:00:33 -0600 Subject: [PATCH] BIO_set_nbio() should always return 1, check input bio for NULL before using --- src/bio.c | 55 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/src/bio.c b/src/bio.c index fbdcdfd08..55ec3db40 100644 --- a/src/bio.c +++ b/src/bio.c @@ -1660,38 +1660,43 @@ void* wolfSSL_BIO_get_data(WOLFSSL_BIO* bio) */ long wolfSSL_BIO_set_nbio(WOLFSSL_BIO* bio, long on) { - int ret = 0; #ifndef WOLFSSL_DTLS (void)on; #endif WOLFSSL_ENTER("wolfSSL_BIO_set_nbio"); - switch (bio->type) { - case WOLFSSL_BIO_SOCKET: - #ifdef XFCNTL - { - int flag = XFCNTL(bio->num, F_GETFL, 0); - if (on) - ret = XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK); - else - ret = XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK); - } - #endif - break; - case WOLFSSL_BIO_SSL: - #ifdef WOLFSSL_DTLS - wolfSSL_dtls_set_using_nonblock((WOLFSSL*)bio->ptr, (int)on); - #endif - break; + if (bio) { + switch (bio->type) { + case WOLFSSL_BIO_SOCKET: + #ifdef XFCNTL + { + int ret = 0; + int flag = XFCNTL(bio->num, F_GETFL, 0); + if (on) { + ret = XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK); + } else { + ret = XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK); + } - default: - WOLFSSL_MSG("Unsupported bio type for non blocking"); - break; + if (ret == -1) { + WOLFSSL_MSG("Call to XFCNTL failed"); + } + } + #endif + break; + case WOLFSSL_BIO_SSL: + #ifdef WOLFSSL_DTLS + wolfSSL_dtls_set_using_nonblock((WOLFSSL*)bio->ptr, (int)on); + #endif + break; + + default: + WOLFSSL_MSG("Unsupported bio type for non blocking"); + break; + } } - if (ret != -1) - return 1; - else - return 0; + + return 1; }