#4169: CBIO set flag to escape from overwritten in SSL_set_bio

This commit is contained in:
Takashi Kojo
2018-08-01 19:16:42 +09:00
parent 04e16b8df8
commit 96c1a567f0
4 changed files with 29 additions and 3 deletions

View File

@@ -1382,6 +1382,7 @@ int InitSSL_Ctx(WOLFSSL_CTX* ctx, WOLFSSL_METHOD* method, void* heap)
#endif
#ifdef OPENSSL_EXTRA
ctx->verifyDepth = MAX_CHAIN_DEPTH;
ctx->cbioFlag = WOLFSSL_CBIO_NONE;
#endif
#ifndef WOLFSSL_USER_IO

View File

@@ -11060,10 +11060,18 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
ssl->biowr = wr;
/* set SSL to use BIO callbacks instead */
if (rd != NULL && rd->type != WOLFSSL_BIO_SOCKET) {
if (
#ifdef OPENSSL_EXTRA
((ssl->cbioFlag & WOLFSSL_CBIO_RECV) != 0) &&
#endif
(rd != NULL && rd->type != WOLFSSL_BIO_SOCKET)) {
ssl->CBIORecv = BioReceive;
}
if (wr != NULL && wr->type != WOLFSSL_BIO_SOCKET) {
if (
#ifdef OPENSSL_EXTRA
((ssl->cbioFlag & WOLFSSL_CBIO_SEND) != 0) &&
#endif
(wr != NULL && wr->type != WOLFSSL_BIO_SOCKET)) {
ssl->CBIOSend = BioSend;
}
}

View File

@@ -1433,12 +1433,18 @@ int EmbedCrlLookup(WOLFSSL_CRL* crl, const char* url, int urlSz)
WOLFSSL_API void wolfSSL_CTX_SetIORecv(WOLFSSL_CTX *ctx, CallbackIORecv CBIORecv)
{
ctx->CBIORecv = CBIORecv;
#ifdef OPENSSL_EXTRA
ctx->cbioFlag |= WOLFSSL_CBIO_RECV;
#endif
}
WOLFSSL_API void wolfSSL_CTX_SetIOSend(WOLFSSL_CTX *ctx, CallbackIOSend CBIOSend)
{
ctx->CBIOSend = CBIOSend;
#ifdef OPENSSL_EXTRA
ctx->cbioFlag |= WOLFSSL_CBIO_SEND;
#endif
}

View File

@@ -2409,6 +2409,14 @@ enum KeyUpdateRequest {
#endif /* WOLFSSL_TLS13 */
#ifdef OPENSSL_EXTRA
enum SetCBIO {
WOLFSSL_CBIO_NONE = 0,
WOLFSSL_CBIO_RECV = 0x1,
WOLFSSL_CBIO_SEND = 0x2,
};
#endif
/* wolfSSL context type */
struct WOLFSSL_CTX {
WOLFSSL_METHOD* method;
@@ -2502,6 +2510,7 @@ struct WOLFSSL_CTX {
const unsigned char *alpn_cli_protos;/* ALPN client protocol list */
unsigned int alpn_cli_protos_len;
byte sessionCtxSz;
byte cbioFlag; /* WOLFSSL_CBIO_RECV/SEND: CBIORecv/Send is set */
CallbackInfoState* CBIS; /* used to get info about SSL state */
#endif
CallbackIORecv CBIORecv;
@@ -2645,7 +2654,6 @@ struct WOLFSSL_CTX {
#endif
};
WOLFSSL_LOCAL
WOLFSSL_CTX* wolfSSL_CTX_new_ex(WOLFSSL_METHOD* method, void* heap);
WOLFSSL_LOCAL
@@ -3536,6 +3544,9 @@ struct WOLFSSL {
WriteDup* dupWrite; /* valid pointer indicates ON */
/* side that decrements dupCount to zero frees overall structure */
byte dupSide; /* write side or read side */
#endif
#ifdef OPENSSL_EXTRA
byte cbioFlag; /* WOLFSSL_CBIO_RECV/SEND: CBIORecv/Send is set */
#endif
CallbackIORecv CBIORecv;
CallbackIOSend CBIOSend;