mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 20:24:39 +02:00
#4169: CBIO set flag to escape from overwritten in SSL_set_bio
This commit is contained in:
@@ -1382,6 +1382,7 @@ int InitSSL_Ctx(WOLFSSL_CTX* ctx, WOLFSSL_METHOD* method, void* heap)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
ctx->verifyDepth = MAX_CHAIN_DEPTH;
|
ctx->verifyDepth = MAX_CHAIN_DEPTH;
|
||||||
|
ctx->cbioFlag = WOLFSSL_CBIO_NONE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WOLFSSL_USER_IO
|
#ifndef WOLFSSL_USER_IO
|
||||||
|
12
src/ssl.c
12
src/ssl.c
@@ -11060,10 +11060,18 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
|||||||
ssl->biowr = wr;
|
ssl->biowr = wr;
|
||||||
|
|
||||||
/* set SSL to use BIO callbacks instead */
|
/* 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;
|
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;
|
ssl->CBIOSend = BioSend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
WOLFSSL_API void wolfSSL_CTX_SetIORecv(WOLFSSL_CTX *ctx, CallbackIORecv CBIORecv)
|
||||||
{
|
{
|
||||||
ctx->CBIORecv = CBIORecv;
|
ctx->CBIORecv = CBIORecv;
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
ctx->cbioFlag |= WOLFSSL_CBIO_RECV;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WOLFSSL_API void wolfSSL_CTX_SetIOSend(WOLFSSL_CTX *ctx, CallbackIOSend CBIOSend)
|
WOLFSSL_API void wolfSSL_CTX_SetIOSend(WOLFSSL_CTX *ctx, CallbackIOSend CBIOSend)
|
||||||
{
|
{
|
||||||
ctx->CBIOSend = CBIOSend;
|
ctx->CBIOSend = CBIOSend;
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
ctx->cbioFlag |= WOLFSSL_CBIO_SEND;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -2409,6 +2409,14 @@ enum KeyUpdateRequest {
|
|||||||
#endif /* WOLFSSL_TLS13 */
|
#endif /* WOLFSSL_TLS13 */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
enum SetCBIO {
|
||||||
|
WOLFSSL_CBIO_NONE = 0,
|
||||||
|
WOLFSSL_CBIO_RECV = 0x1,
|
||||||
|
WOLFSSL_CBIO_SEND = 0x2,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/* wolfSSL context type */
|
/* wolfSSL context type */
|
||||||
struct WOLFSSL_CTX {
|
struct WOLFSSL_CTX {
|
||||||
WOLFSSL_METHOD* method;
|
WOLFSSL_METHOD* method;
|
||||||
@@ -2502,6 +2510,7 @@ struct WOLFSSL_CTX {
|
|||||||
const unsigned char *alpn_cli_protos;/* ALPN client protocol list */
|
const unsigned char *alpn_cli_protos;/* ALPN client protocol list */
|
||||||
unsigned int alpn_cli_protos_len;
|
unsigned int alpn_cli_protos_len;
|
||||||
byte sessionCtxSz;
|
byte sessionCtxSz;
|
||||||
|
byte cbioFlag; /* WOLFSSL_CBIO_RECV/SEND: CBIORecv/Send is set */
|
||||||
CallbackInfoState* CBIS; /* used to get info about SSL state */
|
CallbackInfoState* CBIS; /* used to get info about SSL state */
|
||||||
#endif
|
#endif
|
||||||
CallbackIORecv CBIORecv;
|
CallbackIORecv CBIORecv;
|
||||||
@@ -2645,7 +2654,6 @@ struct WOLFSSL_CTX {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
WOLFSSL_LOCAL
|
WOLFSSL_LOCAL
|
||||||
WOLFSSL_CTX* wolfSSL_CTX_new_ex(WOLFSSL_METHOD* method, void* heap);
|
WOLFSSL_CTX* wolfSSL_CTX_new_ex(WOLFSSL_METHOD* method, void* heap);
|
||||||
WOLFSSL_LOCAL
|
WOLFSSL_LOCAL
|
||||||
@@ -3536,6 +3544,9 @@ struct WOLFSSL {
|
|||||||
WriteDup* dupWrite; /* valid pointer indicates ON */
|
WriteDup* dupWrite; /* valid pointer indicates ON */
|
||||||
/* side that decrements dupCount to zero frees overall structure */
|
/* side that decrements dupCount to zero frees overall structure */
|
||||||
byte dupSide; /* write side or read side */
|
byte dupSide; /* write side or read side */
|
||||||
|
#endif
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
byte cbioFlag; /* WOLFSSL_CBIO_RECV/SEND: CBIORecv/Send is set */
|
||||||
#endif
|
#endif
|
||||||
CallbackIORecv CBIORecv;
|
CallbackIORecv CBIORecv;
|
||||||
CallbackIOSend CBIOSend;
|
CallbackIOSend CBIOSend;
|
||||||
|
Reference in New Issue
Block a user