[squid-dev] Broken trunk after r14735, r14726
Christos Tsantilas
christos at chtsanti.net
Mon Jul 18 11:12:14 UTC 2016
On 07/16/2016 03:56 PM, Amos Jeffries wrote:
> On 16/07/2016 7:02 a.m., Alex Rousskov wrote:
>> Hello,
>>
>> There are two more recent changes that broke trunk:
>>
>> * After r14735 (Replaced TidyPointer with std::unique_ptr), Squid cannot
>> start due to an "std::bad_function_call" exception.
>>
>> * After r14726 (GnuTLS: support for TLS session resume): Squid segfaults
>> when attempting to connect to a Secure ICAP service. Official Squid
>> v4.0.12 suffers from this bug.
>>
>> Stack traces from both crashes are quoted at the end of this email.
>>
>> Please fix these regressions or undo the changes that created or exposed
>> them.
>>
>
> <snip>
>> * segfault when attempting to connect to a Secure ICAP REQMOD service
>> (tested with r14726, r14734):
>>
>
> Does this patch fix the session issue ?
>
> === modified file 'src/security/Session.cc'
> --- src/security/Session.cc 2016-07-07 19:03:02 +0000
> +++ src/security/Session.cc 2016-07-16 12:43:38 +0000
> @@ -53,7 +53,7 @@
> void
> Security::SetSessionResumeData(const Security::SessionPtr &s, const
> Security::SessionStatePointer &data)
> {
> - if (s) {
> + if (data) {
> #if USE_OPENSSL
> (void)SSL_set_session(s, data.get());
> #elif USE_GNUTLS
>
>
> I'm a little worried about the code calling SetSessionResumeData.
> OpenSSL documentation states:
> "If there is already a session set inside ssl (because it was set with
> SSL_set_session() before or because the same ssl was already used for a
> connection), SSL_SESSION_free() will be called for that session."
>
> But our SetSessionResumeData() is called after setting up the sessions
> host data, etc. So I'm thinking all that setup in
> Ssl::BlindPeerConnector::initializeTls() may be thrown away by the
> resume action being called.
>
Squid crashes at the first TLS connection trying to establish to the
ICAP server. There is not any session to resume so the SSL session
related methods should not called at all.
It is a strange crash. Is it a corrupted SSL object?
I must say that I am worrying a lot for all of these changes.
It is very difficult for me to follow them, and already I have
difficulties to read and debug squid openSSL relate code.
We are using our own naming scheme for openSSL structures, eg
"Security::SessionPtr" instead of "SSL *" or
"Security::SessionStatePointer" instead of "SSL_SESSION *" and this is
make it very difficult to follow Squid/openSSL code.
It is difficult to read an example openSSL code and trying convert it to
squid, or reading a reference implementation and trying check against
squid code. Someone is obligated to search for definitions and
equivalents types all the time.
I have not ever study for a good way to support both GnuTLS and openSSL
for squid, to know the problems, but probably I would start to
implement openSSLAcceptor/gnuTlsAcceptor and
openSSLPeerConnector/gnuTLSPeerConnector classes.
Internally gnuTLS and openSSL should use their own types. This is will
help current and future squid developers.
I am just expressing my worries here, I do not want to impose anything
and if there was a related discussion in squid-dev, sorry that I do not
participate and I did not express my concerns earlier.
Regards,
Christos
More information about the squid-dev
mailing list