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
    <rouss...@measurement-factory.com
    <mailto:rouss...@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@lists.squid-cache.org
        <mailto:squid-dev@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@lists.squid-cache.org
http://lists.squid-cache.org/listinfo/squid-dev

_______________________________________________
squid-dev mailing list
squid-dev@lists.squid-cache.org
http://lists.squid-cache.org/listinfo/squid-dev

Reply via email to