<moved to private mail>

On Mon, Feb 23, 2004, Paul L. Allen wrote:

> 
> OK, here's where it took me:
> 
> The setup is a stack consisting of a buffered BIO, an SSL BIO, and
> a socket BIO.  In a typical test run, client and server have had a
> conversation of a hundred or so messages.  The most recent exchange
> involved a message from the client of about 4500 bytes.  Messages are
> newline-delimited ASCII lines exchanged via BIO_puts()/BIO_gets(),
> with a BIO_flush() after each BIO_puts().
> 
> The client sends a 4-byte message using BIO_puts().
> buffer_write() stashes the bytes in the buffer and returns.
> The client calls BIO_flush() on the buffered BIO.
> In buffer_ctl(), BIO_write() gets called to get the SSL BIO to write the 
> bytes.
> BIO_write() calls the bwrite method on the SSL BIO, which resolves to 
> ssl_write().
> ssl_write() calls SSL_write().
> SSL_write() calls ssl->method->ssl_write, which resolves to ssl3_write().
> ssl3_write() calls ssl3_write_bytes().
> ssl3_write_bytes() calls do_ssl3_write().
> do_ssl3_write() calls s->method->ssl3_enc->mac(), which hangs until a
> SIGALRM gets delivered in about 60 seconds.
> 
> On all prior runs down this pathway, s->method->ssl3_enc->mac()
> returns OK, s->method->ssl3_enc->enc() is called, followed by s2n(),
> ssl3_write_pending() gets called to ask the socket BIO to write the
> data, and we return back up the stack to where BIO_flush() returns to
> my code.  The above experiment is with the 2/19 snapshot of the OpenSSL
> code, liberally sprinkled with fprintf's.  It's possible that I've
> missed some links in the chain, although I've tried pretty hard not to.
> 
> The hang always involves a short message from the client following
> an interchange involving a long message from the client.  If I move
> the transaction containing the long line around in the sequence of
> test transactions, the client sometimes does not hang.  But when it
> does hang, it is always right after a long transaction.  Interestingly,
> the "long" transactions consist of a 4500 byte message from the client,
> a short (100 bytes) message from the server, another short message from
> the client (which always succeeds), and another short message from the
> server.  When the hang happens, it is on the next message from the
> client (the second short client message after a long one).
> 
> I'm stumped!
> 

I'm not immediately sure what the problem is either. It might be stack
corruption somewhere or something confusing the malloc library. Have you tried
it under a debugging malloc library that can detect and out of bounds
accesses?

Have you tried this under a different OS to see if you get the same behaviour?

I could look into this as part of my commercial consultancy services if you
can't get anywhere. Maybe with a discount if it turned out to be an OpenSSL
bug :-)

Steve.
--
Dr Stephen N. Henson. Email, S/MIME and PGP keys: see homepage
OpenSSL project core developer and freelance consultant.
Funding needed! Details on homepage.
Homepage: http://www.drh-consultancy.demon.co.uk
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to