Re: Memoryleak in SSL.Connection

Andre Reitz <[email protected]>
Newsgroups gmane.comp.python.cryptography
Message-ID <[email protected]>
On Thu, 15 Apr 2004 08:48:04 +0800
Ng Pheng Siong <[email protected]> wrote:

> On Wed, Apr 14, 2004 at 11:21:17AM +0200, Andre Reitz wrote:
> >  calling
> >     set_shutdown(SSL.SSL_SENT_SHUTDOWN|SSL.SSL_RECEIVED_SHUTDOWN)
> >  before destructor __del__ comes
> >  stops my multi-threaded server from hanging.
> >
> >  if I do not call
> >     set_shutdown(SSL.SSL_SENT_SHUTDOWN|SSL.SSL_RECEIVED_SHUTDOWN)
> >  the complete server sometimes hangs in
> >    m2.bio_free(self.sslbio)  of Connection.__del__
> >
> > Why?
> >   does bio_free still want to communicate with the client?
> >   (which is already disconnected?)
> 
> M2Crypto's bio_free calls OpenSSL API BIO_free calls OpenSSL internal
> ssl_free calls OpenSSL API SSL_shutdown and others.
> 
> SSL_shutdown tears down the SSL connection, including handling the closure
> alert messages I mentioned in the earlier post.
> 
> The statement set_shutdown(...) tells OpenSSL to not send nor wait for the
> closure alerts.
> 
> The alerts are actually a security feature that defends against *truncation
> attacks*.
> 
> I've been thinking of creating, say, classes SSL.SContext and
> SSL.SConnection that presents a simpler API, with more defaults and fewer
> methods.
> 
> OTOH, I'm reluctant to hide any security feature that inconveniences the
> app programmer under the hood because I think that's saying, "Trust me,
> I've figured this out and have decided for you what you need to know."
> 
> Trust me you can ;-) but decide for yourself you should.
> 
> What does the list think?
> 

Well I think that M2Crypto is ok as it is.

The only change I would make is:
add: 
  set_shutdown(SSL.SSL_SENT_SHUTDOWN|SSL.SSL_RECEIVED_SHUTDOWN)
to 
  Connection.__del__

(If the application-Programmer doesn't call close() or shutdown() 
 in a correct way)

I think that if the __del__ method gets called, and the connection
isn't really already "shutdown" the worst thing that could happen,
is that __del__ doesn't succeed in any case.

My approach would be to regard the __del__ method as some kind of
a "disconnect which always succeeds without problems or errors"-method.


Greetings, Andre'

> --
> Ng Pheng Siong <[email protected]>
> 
> http://firewall.rulemaker.net -+- Firewall Change Management & Version Control
> http://sandbox.rulemaker.net/ngps -+- ZServerSSL/Zope Windows Installers


-- 
__________________________________________________________________________

Als Technologieunternehmen konzipieren und entwickeln wir maßgeschneiderte Feedback- und
Monitoring-Systeme - wie beispielsweise Lösungen für Beschwerde- und Ideenmanagement.
Mit dem Inquery® Survey Server bieten wir eine der leistungsfähigsten Standardlösungen für
Online-Umfragen mit dem Schwerpunkt auf der Messung von Kundenzufriedenheit an.
__________________________________________________________________________


Inworks GmbH
Andre Reitz, Leiter Entwicklung
Hörvelsinger Weg 39, 89081 Ulm, Germany
Tel +49 (0) 731 / 93807-21
Fax +49(0)731/93807-18
Internet: http://www.inworks.de
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.