Pila de llamadas extraña, ¿podría haber un problema en el uso de openssl por parte de asio?

StackOverflow https://stackoverflow.com/questions/111415

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":

¿Fue útil?

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.

Fuente relevante:

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top