LINUX.ORG.RU

libssl/crypto валится с сегфолтом

 , ,


0

1

Есть такой код:

RError RDeviceSSLCreate(RDevice device)
{
    u32 portindex = 0;

    while (warehouse.devices.data[device].port[portindex])
    {
        warehouse.devices.data[device].ssl[portindex] =
            SSL_new(warehouse.devices.data[device].ctx);
        if (!warehouse.devices.data[device].ssl[portindex])
        {
            ERR_print_errors_fp(stdout);
            return R_ERROR_BADSSL;
        }

        if (!SSL_set_fd(warehouse.devices.data[device].ssl[portindex], warehouse.devices.data[device].socket[portindex]))
        {
            ERR_print_errors_fp(stdout);
            return R_ERROR_BADSSL;
        }

        if (SSL_connect(warehouse.devices.data[device].ssl[portindex]) == -1)
        {
            ERR_print_errors_fp(stdout);
            return R_ERROR_BADSSL;
        }

        portindex++;
    }
    return R_ERROR_SUCCESS;
}

Все стадии кроме последней идут успешно. Вываливается не всегда, а в 1-0.5% случаев. Обычно когда переподключение приходится делать несколько раз (устройство режектит или проблемы связи). Успешно проходит через все стадии и валится на SSL_connect. Примерно так:

#2  0xb727bba0 in ?? () from /lib/libcrypto.so.0
#3  0xb727bc4a in ?? () from /lib/libcrypto.so.0
#4  0xb727c32c in ERR_get_state () from /lib/libcrypto.so.0
#5  0xb727ae91 in ERR_clear_error () from /lib/libcrypto.so.0
#6  0xb7339091 in ssl23_connect () from /lib/libssl.so.0
#7  0xb7348dea in SSL_connect () from /lib/libssl.so.0
#8  0xb7535cd9 in RDeviceSSLCreate (device=5)
    at ./code/libratatoskr/devices/devices.c:255

Иногда сваливается на отправке:

Program terminated with signal 11, Segmentation fault.
#0  0xb734576c in ssl3_write () from /lib/libssl.so.0
#0  0xb734576c in ssl3_write () from /lib/libssl.so.0
#1  0xb735afa2 in SSL_write () from /lib/libssl.so.0
#2  0xb754cc78 in sendall (index=1, bytes=..., portindex=0)
    at ./code/libratatoskr/definitions/serials.c:114

Может надо что-то еще проверять? Нагуглить удалось только один подобный случай (код матч 99%), но там не сегфолт, а просто без ошибки выходило - оказалось что у него был неблокирующий сокет (у нас блокирующий) и просто не успевало подключиться.

★★★★★

компилировать статиком из соурсов и смотреть дебагером

anonymous
()
Ответ на: комментарий от anonymous

Толпа умных анонимусов и ни один не прочитал кусок с «Вываливается не всегда, а в 1-0.5% случаев.». Отладка невозможна, о падении известно пост-фактум.

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от PPP328

да вы что? а запустить под отладчиком и оставить, что бы потом когда свалится посмотреть отладчиком что где когда - слабо ?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.