M1 macOS | Memory leaks while using APPLE shipped libcurl/8.1.2 (SecureTransport)

Hi,

Machine: M1 sonoma 14.1.1

At my test I am using macOS shipped lib of curl, and its default LibreSSL, that is: curl 8.1.2 (x86_64-apple-darwin23.0) libcurl/8.1.2 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.55.1

I am getting memory leaks while running the following test:

void CallCurl() {   
    CURL *hnd;
    hnd = curl_easy_init();
    curl_easy_setopt(hnd, CURLOPT_URL, "https://www.google.com");
    curl_easy_perform(hnd);
    curl_easy_cleanup(hnd);
}

I track the leaks with macOS instruments, and I see that all leaks are from libcrypto. The leaks are measured after curl_easy_cleanup.

Examples for the leaks stack frames:

serialize_ECPublicKey
ECDSA_do_verify_new
ossl_ecdsa_verify
EVP_DigestVerifyFinal
tls13_server_certificate_verify_recv
tls13_handshake_perform
tls13_legacy_connect
ossl_connect_common
ssl_cf_connect
cf_setup_connect
cf_hc_connect
Curl_conn_connect
multi_runsingle
curl_multi_perform
curl_easy_perform
CallCurl()
main
start
ccMallocECCryptor
CCECCryptorImportKey
ECDSA_do_verify_new
ossl_ecdsa_verify
EVP_DigestVerifyFinal
tls13_server_certificate_verify_recv
tls13_handshake_perform
tls13_legacy_connect
ossl_connect_common
ssl_cf_connect
cf_setup_connect
cf_hc_connect
Curl_conn_connect
multi_runsingle
curl_multi_perform
curl_easy_perform
CallCurl()
main
start
ccMallocECCryptor
CCECCryptorImportKey
ECDSA_do_verify_new
ossl_ecdsa_verify
EVP_DigestVerifyFinal
tls13_server_certificate_verify_recv
tls13_handshake_perform
tls13_legacy_connect
ossl_connect_common
ssl_cf_connect
cf_setup_connect
cf_hc_connect
Curl_conn_connect
multi_runsingle
curl_multi_perform
curl_easy_perform
CallCurl()
main
start

Any you familiar with memory leaks issues at curl that is shipped with macOS? Is there a workaround?

Thx, Moshe.

Replies

This looks like a genuine leak - I see this reproduce with your example, and also with the example given in man curl_easy_init:

       CURL *curl = curl_easy_init();
       if(curl) {
         CURLcode res;
         curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
         res = curl_easy_perform(curl);
         curl_easy_cleanup(curl);
       }

Please consider reporting this issue at https://feedbackassistant.apple.com - the information you included here would make a great bug report! You can request information about workarounds in the feedback, which should be forwarded to the relevant team.

  • Hi, I reported the issue and moved it to the team.

Add a Comment