I have wrote a multi-threaded server (UNIX) and I use OpenSSL for encrypting 
communication between
the server and the client (the client is an MFC application, but I think this 
doesn't matter...).
Server is running fine but randomly it crashes and every time in SSL_read() 
method.
Here is a snippet from one of the core dumps:
------------------------------------------------------------------------
Core was generated by `/foo/bar -l'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libccext2-1.5.so.0...done.
Loaded symbols for /usr/lib/libccext2-1.5.so.0
Reading symbols from /usr/lib/libccgnu2-1.5.so.0...done.
Loaded symbols for /usr/lib/libccgnu2-1.5.so.0
Reading symbols from /usr/lib/libboost_regex.so.1...done.
Loaded symbols for /usr/lib/libboost_regex.so.1
Reading symbols from /lib/tls/libpthread.so.0...done.
Loaded symbols for /lib/tls/libpthread.so.0
Reading symbols from /usr/lib/libdaemon.so.0...done.
Loaded symbols for /usr/lib/libdaemon.so.0
Reading symbols from /lib/libssl.so.4...done.
Loaded symbols for /lib/libssl.so.4
Reading symbols from /lib/libcrypto.so.4...done.
Loaded symbols for /lib/libcrypto.so.4
Reading symbols from /usr/lib/liblog4cxx.so.9...done.
Loaded symbols for /usr/lib/liblog4cxx.so.9
Reading symbols from /usr/lib/libstdc .so.6...done.
Loaded symbols for /usr/lib/libstdc .so.6
Reading symbols from /lib/tls/libm.so.6...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/tls/librt.so.1...done.
Loaded symbols for /lib/tls/librt.so.1
Reading symbols from /usr/lib/libz.so.1...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /usr/lib/libgssapi_krb5.so.2...done.
Loaded symbols for /usr/lib/libgssapi_krb5.so.2
Reading symbols from /usr/lib/libkrb5.so.3...done.
Loaded symbols for /usr/lib/libkrb5.so.3
Reading symbols from /lib/libcom_err.so.2...done.
Loaded symbols for /lib/libcom_err.so.2
Reading symbols from /usr/lib/libk5crypto.so.3...done.
Loaded symbols for /usr/lib/libk5crypto.so.3
Reading symbols from /lib/libresolv.so.2...done.
Loaded symbols for /lib/libresolv.so.2
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /usr/lib/libxml2.so.2...done.
Loaded symbols for /usr/lib/libxml2.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
Reading symbols from /lib/libnss_dns.so.2...done.
Loaded symbols for /lib/libnss_dns.so.2
#0  0x00c9b770 in SSL_read () from /lib/libssl.so.4
(gdb) bt
#0  0x00c9b770 in SSL_read () from /lib/libssl.so.4
#1  0x0805b27f in wns::ServerPort::pending (this=0x9305a30) at serverport.cpp:85
#2  0x00d51241 in ost::SocketService::run (this=0x92cf930) at socketport.cpp:748
#3  0x00e0713d in ccxx_exec_handler (th=0x92cf930) at thread.cpp:1097
#4  0x00a813cc in start_thread () from /lib/tls/libpthread.so.0
#5  0x004d9c3e in clone () from /lib/tls/libc.so.6
------------------------------------------------------------------------

I also made a disassembly:

------------------------------------------------------------------------
(gdb) disass
Dump of assembler code for function SSL_read:
0x00c9b75b  :        push   �p
0x00c9b75c  :        mov    %esp,�p
0x00c9b75e  :        push   �x
0x00c9b75f  :        call   0xc867ce 
0x00c9b764  :        add    $0x130f4,�x
0x00c9b76a  :       sub    $0x14,%esp
0x00c9b76d  :       mov    0x8(�p),�x
0x00c9b770  :       mov    0x20(�x),�x
0x00c9b773  :       test   �x,�x
0x00c9b775  :       je     0xc9b7a9 
0x00c9b777  :       testb  $0x2,0x30(�x)
0x00c9b77b  :       je     0xc9b78c 
0x00c9b77d  :       movl   $0x1,0x18(�x)
0x00c9b784  :       xor    �x,�x
0x00c9b786  :       add    $0x14,%esp
0x00c9b789  :       pop    �x
0x00c9b78a  :       pop    �p
0x00c9b78b  :       ret
0x00c9b78c  :       mov    0x10(�p),�x
0x00c9b78f  :       mov    0x8(�x),�x
0x00c9b792  :       mov    �x,0x8(%esp)
0x00c9b796  :       mov    0xc(�p),�x
0x00c9b799  :       mov    �x,(%esp)
0x00c9b79c  :       mov    �x,0x4(%esp)
0x00c9b7a0  :       call   *0x18(�x)
0x00c9b7a3  :       add    $0x14,%esp
0x00c9b7a6  :       pop    �x
0x00c9b7a7  :       pop    �p
0x00c9b7a8  :       ret
0x00c9b7a9  :       lea    0xffffad32(�x),�x
0x00c9b7af  :       movl   $0x345,0x10(%esp)
0x00c9b7b7  :       movl   $0x114,0x8(%esp)
0x00c9b7bf  :      mov    �x,0xc(%esp)
0x00c9b7c3  :      movl   $0xdf,0x4(%esp)
0x00c9b7cb  :      movl   $0x14,(%esp)
0x00c9b7d2  :      call   0xc85c68
0x00c9b7d7  :      mov    $0xffffffff,�x
0x00c9b7dc  :      jmp    0xc9b786 
End of assembler dump.
------------------------------------------------------------------------

The crash is always in the line  0x00c9b770  :       mov    0x20(�x),�x
Can anyone suggest me what to do?

Thanks for your time!
Regards,
Scerbatiuc Ion




__________________________________
Whozin  - Are you in? 
We pay  you  to read your own e-mail! 
Primul webmail adevărat în  limba română !   

Reply via email to