[squid-dev] Squid 5.6 leaking memory when peeking for an origin with an invalid certificate
Alex Rousskov
rousskov at measurement-factory.com
Wed May 10 21:09:17 UTC 2023
On 3/23/23 19:56, Hamilton Coutinho wrote:
> We found a way to reproduce the leak: set up squid to run in intercept
> mode + SSL description + memory pools off (to ease identifying the leak)
> and then generate requests to sites with invalid certs (eg, CA not
> installed), for instance: curl -k https://slscr.update.microsoft.com
Thanks a lot for sharing those details! Using them, I was able to
reproduce one memory leak. Please try the following fix:
https://github.com/squid-cache/squid/pull/1346
I do not know whether that PR changes port to v5 cleanly or whether the
same bug exists in v5. I can only speculate that v5 has a similar leak.
> squidclient mgr:mem should show ever increasing HttpRequest instances.
> As far as I can tell, the HttpRequest object created
> in ConnStateData::buildFakeRequest() is never freed because its refcount
> > 0.
> Any ideas where an HTTPMSGUNLOCK() might be missing?
Sorry, I do not know. In my master/v7-based tests, HttpRequest objects
are not leaking. However, I am not testing an intercepting Squid. I
still have one red flag to investigate, so perhaps I will be able to
reproduce and fix that HttpRequest leak as well.
HTH,
Alex.
> On Wed, Jan 18, 2023 at 11:28 AM Hamilton Coutinho wrote:
>
> Hi Alex,
>
> Thanks for the prompt reply! Thanks also for the clarifications.
>
> Agreed, I just realized the requests seem to be failing
> with Http::scServiceUnavailable, so my focus turned
> to Security::PeerConnector::sslCrtvdHandleReply() and friends.
>
> Best.
>
> On Wed, Jan 18, 2023 at 11:11 AM Alex Rousskov
> <rousskov at measurement-factory.com
> <mailto:rousskov at measurement-factory.com>> wrote:
>
> On 1/18/23 13:46, Hamilton Coutinho wrote:
> > Hi all,
> >
> > We are observing what seems to be several objects leaking in
> the output
> > mgr:mem, to the tune of 10s of 1000s
> >
> of HttpRequest, HttpHeaderEntry, Comm::Connection, Security::ErrorDetail, cbdata PeekingPeerConnector (31), etc.
> >
> > We dumped a core and managed to find some HttpRequest objects
> and they
> > all seem to have failed in the same way, with an
> ERR_SECURE_CONNECT_FAIL
> > category, for a site that has a certificate signed by a CA
> authority not
> > available to squid.
> >
> > If I would guess, the origin of the problem might be in
> > Ssl::PeekingPeerConnector::checkForPeekAndSpliceMatched():
> >
> > if (finalAction == Ssl::bumpTerminate) {
> > bail(new ErrorState(ERR_SECURE_CONNECT_FAIL,
> Http::scForbidden,
> > request.getRaw(), al));
> > clientConn->close();
> > clientConn = nullptr;
> >
> > Wondering if assigning null to clientConn there would be
> premature.
>
>
> FWIW, that connection pointer reset itself looks OK to me.
> ConnStateData
> and/or others should have a connection closure handler attached
> to the
> clientConn descriptor. That handler should be notified by Comm and
> initiate cleanup of the objects responsible for client-Squid
> communication.
>
> The bail() call above should inform the requestor about the
> error/termination and terminate this AsyncJob. That requestor
> should
> then close the Squid-server connection and clean up associated
> state.
>
> While there may be bugs in those "should..." sequences, please
> note that
> the pasted code is not related to handling of untrusted origin
> servers
> (unless your ssl_bump rules specifically activate the terminate
> action
> upon discovering such an origin server). The pasted code is
> reacting to
> an "ssl_bump terminate" rule matching.
>
>
> Cheers,
>
> Alex.
>
> _______________________________________________
> squid-dev mailing list
> squid-dev at lists.squid-cache.org
> <mailto:squid-dev at lists.squid-cache.org>
> http://lists.squid-cache.org/listinfo/squid-dev
> <http://lists.squid-cache.org/listinfo/squid-dev>
>
>
>
> --
> Hamilton
>
>
>
> --
> Hamilton
>
> _______________________________________________
> squid-dev mailing list
> squid-dev at lists.squid-cache.org
> http://lists.squid-cache.org/listinfo/squid-dev
More information about the squid-dev
mailing list