On Mon, Apr 01, 2002 at 01:30:31PM -0500, Brad Barfield wrote:
> OpenSSL version: 0.9.6c
> OS: Linux 2.4.7-10
> EGCS-2.91.66
>
> I am seeing a crash in my SSL client application where the ssl->s3
> member is NULL..... from my limited understanding of the code, this
> should never happen at the point that I'm seeing it. Below is the gdb
> output from two different crashes:
>
> =======
> crash #1:
> =======
> (gdb) where
> #0 0x08062e09 in ssl3_get_message (s=0x836d650, st1=4384, stn=4385,
> mt=2,
> max=300, ok=0xbffff358) at s3_both.c:344
> #1 0x0805aa53 in ssl3_get_server_hello (s=0x836d650) at s3_clnt.c:549
> #2 0x08059efb in ssl3_connect (s=0x836d650) at s3_clnt.c:200
> #3 0x08067bfb in SSL_connect (s=0x836d650) at ssl_lib.c:720
> #4 0x0804fd56 in ssl_write (i=46) at ssl.c:758
> #5 0x0804d126 in main_loop () at main.c:624
> #6 0x0804e647 in main (argc=11, argv=0xbffff9a4) at main.c:1273
> #7 0x40068507 in __libc_start_main (main=0x804dc08 <main>, argc=11,
> ubp_av=0xbffff9a4, init=0x804b3cc <_init>, fini=0x80e3700 <_fini>,
> rtld_fini=0x4000dc14 <_dl_fini>, stack_end=0xbffff99c)
> at ../sysdeps/generic/libc-start.c:129
>
> (gdb) p s->s3
> $1 = (struct ssl3_state_st *) 0x0
I had a look into the SSL code and I could not find a reason why
s->s3 should become NULL. It is initialized in SSL_new() and destroyed
in SSL_free(). The only additional idea I have would be that there
may be an overflow somewhere that is overwriting part of "SSL *s", so
that s->s3 becomes invalid.
If this problem would be reproduced easily, I would recommend running
with efence enabled, but this is out of options for a long running process,
as it manages to consume large amounts of system resources.
You may consider quering s->3 for being non-NULL before calling
SSL_connect(). If it is NULL, the bug appeared.
> =======
> crash #2:
> =======
> (gdb) where
> #0 0x08062e09 in ssl3_get_finished (s=0x836d650, a=4384, b=4385)
> at s3_both.c:220
> #1 0x0805aa53 in ssl3_connect (s=0x836d650) at s3_clnt.c:418
> #2 0x08059efb in ssl3_connect (s=0x836d650) at s3_clnt.c:114
> #3 0x08067bfb in SSL_pending (s=0x836d650) at ssl_lib.c:596
> #4 0x0804fd56 in ssl_read (i=46) at ssl.c:738
> #5 0x0804d126 in main_loop () at main.c:628
> #6 0x0804e647 in main (argc=11, argv=0xbffff9a4) at main.c:1278
>
> (gdb) p s->s3
> $1 = (struct ssl3_state_st *) 0x0
Here it is even more critical, as it means that s->s3 must have changed
between operations.
> handshake_func = 0x80599f0 <do_ssl_write+608>, server = 0, new_session
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ??
>From the backtrace it also seems, that you are either using implicit
negotiation (by calling SSL_pending()), or that a renegotiation is
taking place. Maybe this can give additional hints for tracking the
problem back.
Best regards,
Lutz
--
Lutz Jaenicke [EMAIL PROTECTED]
http://www.aet.TU-Cottbus.DE/personen/jaenicke/
BTU Cottbus, Allgemeine Elektrotechnik
Universitaetsplatz 3-4, D-03044 Cottbus
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]