mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-01 03:34: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
|
||||
#ifdef OPENSSL_EXTRA
|
||||
ctx->verifyDepth = MAX_CHAIN_DEPTH;
|
||||
ctx->cbioFlag = WOLFSSL_CBIO_NONE;
|
||||
#endif
|
||||
|
||||
#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;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user