Странный стек вызовов, может ли это быть проблемой при использовании openssl в asio?

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

Вопрос

У меня есть этот странный стек вызовов, и я не могу понять, почему.

Мне кажется, что asio вызывает чтение open ssl, а затем получает отрицательное возвращаемое значение (-37).

Затем Asio, похоже, пытается использовать его внутри функции memcpy.

Функция, вызывающая этот стек вызовов, используется сотни тысяч раз без этой ошибки.

Это случается очень редко, примерно раз в неделю.

ulRead = (boost::asio::read(spCon->socket(), boost::asio::buffer(_requestHeader, _requestHeader.size()), boost::asio::transfer_at_least(_requestHeader.size()), error_));

Обратите внимание, что размер заголовка запроса всегда составляет ровно 3 байта.

Может ли кто-нибудь пролить некоторый свет на возможные причины?

Примечание:Я использую boost asio 1.36

Вот сбой стека вызовов, который происходит в memcpy из-за огромного "количества":

Это было полезно?

Решение

Быстрый взгляд на evp_lib.c показывает, что он пытается извлечь длину из контекста шифрования, и в вашем случае получает очень плохое значение (tm).Затем он использует это значение для копирования строки (которая выполняет memcpy).Я предполагаю, что что-то разрушает ваш шифр, будь то проблема потокобезопасности или чтение большего количества байтов в буфер, чем разрешено.

Соответствующий источник:

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top