>>> >>> in that case it crashes here:
>>> >>>
>>> >>>         if (s->msg_callback)
>>> >>>                 s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
>>> >>> s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg);
>>> >>>
>>> >>
>>> >> So is the pointer to the callback wrong, or is the SIGSEGV in the
>>> >> called function?
>>> >
>>> > What happens if you type just 'disass' at debugger prompt. Question is
>>> > if you see meaningful code at point of failure, at 0x80e130 in
>>> original
>>> > example. If you see meaningful instruction with reference to memory,
>>> > issue even 'info reg'. If you don't see meaningful code, then it's
>>> > likely that pointer to callback is wrong. In which case 'print $r10'
>>> > would print address of failure. $r10 is because we already established
>>> > that it was called with call *%r10.
>>> >
>>>
>>> (gdb) disass
>>> No function contains program counter for selected frame.
>>> (gdb) disass 0x000000000080e130
>>> No function contains specified address.
>>> (gdb) print $r10
>>> $1 = 8446256
>>>
>>> 8446256 = 0x000000000080e130
>>>
>>> so the pointer was wrong in the first place,
>>> got changed or the function is not there anymore
>>
>> I suggest you try 'x/16i 0x80e130' as well, because disass can report "No
>> function contains specified address." for an address that has no symbol
>> information, even if it contains code.
>>
> (gdb) x/16i 0x80e130
> => 0x80e130:    loopne 0x80e138
>    0x80e132:    addl   $0x0,(%rax)
>    0x80e138:    rclb   0x7e(%rdx)
>    0x80e13b:    add    %al,(%rax)
>    0x80e13d:    add    %al,(%rax)

This is not meaningful code and therefore crash is more likely to be
caused by corrupted data... Hmmmmm...
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to