Pila de llamadas extraña, ¿podría haber un problema en el uso de openssl por parte de asio?
-
02-07-2019 - |
Pregunta
Tengo esta extraña pila de llamadas y no entiendo por qué.
Me parece que asio llama a la lectura de open ssl y luego obtiene un valor de retorno negativo (-37).
Asio parece intentar usarlo dentro de la función memcpy.
La función que causa esta pila de llamadas se usa cientos de miles de veces sin este error.
Ocurre sólo en raras ocasiones, aproximadamente una vez por semana.
ulRead = (boost::asio::read(spCon->socket(), boost::asio::buffer(_requestHeader, _requestHeader.size()), boost::asio::transfer_at_least(_requestHeader.size()), error_));
Tenga en cuenta que el tamaño del encabezado de la solicitud es siempre exactamente de 3 bytes.
¿Alguien podría arrojar algo de luz sobre las posibles razones?
Nota:Estoy usando boost asio 1.36
Aquí está el fallo de la pila de llamadas que ocurre en memcpy debido al enorme "recuento":
Solución
Un vistazo rápido a evp_lib.c muestra que intenta extraer una longitud del contexto de cifrado y, en su caso, obtiene un valor muy malo (tm).Luego usa este valor para copiar una cadena (que realiza memcpy).Supongo que algo está destruyendo su cifrado, ya sea un problema de seguridad de subprocesos o una lectura en un búfer de más bytes de los permitidos.
int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
{
int i=0,j;
if (type != NULL)
{
j=EVP_CIPHER_CTX_iv_length(c);
OPENSSL_assert(j <= sizeof c->iv);
i=ASN1_TYPE_set_octetstring(type,c->oiv,j);
}
return(i);
}