Hello,
We’re experiencing an issue with a QT (single threaded) application when using curl 7.64.1 (x86_64-apple-darwin20.0) - packaged on MacOS. ——- curl 7.64.1 (x86_64-apple-darwin20.0) libcurl/7.64.1 (SecureTransport) LibreSSL/2.8.3 zlib/1.2.11 nghttp2/1.41.0 Release-Date: 2019-03-27 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL UnixSockets ——- Our program is sending ~800 requests per minute, and experiencing crashes every ~5 minutes. We verified that every CurlEasy handle is allocated/deallocated properly (no nullptr after allocation, no double frees happening). When encountering the crash while running in a debugger, we found a nullptr in a linked list - we assume this is CurlMulti’s linked list of CurlEasy handles. As we checked that no curl handles were null when allocated, it seems like there’s memory corruption for that to show up in one of the linked lists. Since installing and building with curl 7.80.1, we’re experiencing no issues - the program is no longer crashing. Our issue was resolved, but we would like to know why this was happening - is this a known bug? We were unable to find anyone experiencing the issue, but given that this is the default version on macOS Big Sur currently, it may be affecting other people as well. ——— curl 7.81.0 (x86_64-apple-darwin20.6.0) libcurl/7.81.0 (SecureTransport) OpenSSL/1.1.1m zlib/1.2.11 brotli/1.0.9 zstd/1.5.1 libidn2/2.3.2 libssh2/1.10.0 nghttp2/1.46.0 librtmp/2.3 OpenLDAP/2.6.0 Release-Date: 2022-01-05 Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL TLS-SRP UnixSockets zstd ——- We’re using these settings: curl.set(CURLOPT_URL, url); curl.set(CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); curl.set(CURLOPT_POST, 1L); Two of the stack traces we’ve seen multiple times listed below: ——————————————————————————————— Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x00000000000016a0 Exception Note: EXC_CORPSE_NOTIFY Termination Signal: Segmentation fault: 11 Termination Reason: Namespace SIGNAL, Code 0xb Terminating Process: exc handler [3483] VM Regions Near 0x16a0: --> __TEXT 106672000-1067a6000 [ 1232K] r-x/r-x SM=COW /Applications/OurApp.app/Contents/MacOS/backend Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libcurl.4.dylib 0x00007fff32e978c7 multi_socket + 188 1 libcurl.4.dylib 0x00007fff32e97ac9 curl_multi_socket_action + 38 2 backend 0x000000010676182d CurlMulti::curlSocketAction(int, int) + 45 (CurlMulti.cpp:156) 3 backend 0x00000001067617a0 CurlMulti::socketReadyWrite(int) + 32 (CurlMulti.cpp:148) 4 backend 0x0000000106763732 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QSocketDescriptor>, void, void (CurlMulti::*)(int)>::call(void (CurlMulti::*)(int), CurlMulti*, void**) + 146 (qobjectdefs_impl.h:152) 5 backend 0x000000010676368d void QtPrivate::FunctionPointer<void (CurlMulti::*)(int)>::call<QtPrivate::List<QSocketDescriptor>, void>(void (CurlMulti::*)(int), CurlMulti*, void**) + 77 (qobjectdefs_impl.h:185) 6 backend 0x00000001067635e2 QtPrivate::QSlotObject<void (CurlMulti::*)(int), QtPrivate::List<QSocketDescriptor>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) + 146 (qobjectdefs_impl.h:418) 7 org.qt-project.QtCore 0x00000001078d2374 0x1076bc000 + 2188148 8 org.qt-project.QtCore 0x00000001078da9cb QSocketNotifier::event(QEvent*) + 491 9 org.qt-project.QtCore 0x00000001078a1e18 QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) + 88 10 org.qt-project.QtCore 0x00000001078a1ac7 QCoreApplication::notifyInternal2(QObject*, QEvent*) + 167 11 org.qt-project.QtCore 0x0000000107900683 QEventDispatcherUNIXPrivate::activateSocketNotifiers() + 99 12 org.qt-project.QtCore 0x000000010790112d QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 925 13 org.qt-project.QtCore 0x000000010789e0c7 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 471 14 org.qt-project.QtCore 0x00000001078a2062 QCoreApplication::exec() + 130 15 backend 0x0000000106674b15 main + 949 (main.cpp:81) 16 libdyld.dylib 0x00007fff20378f3d start + 1 Thread 1: 0 libsystem_pthread.dylib 0x00007fff20359420 start_wqthread + 0 Thread 2:: Qt bearer thread 0 libsystem_kernel.dylib 0x00007fff2032e9ca poll + 10 1 org.qt-project.QtCore 0x00000001078ff8ee qt_safe_poll(pollfd*, unsigned int, timespec const*) + 222 2 org.qt-project.QtCore 0x00000001079010bc QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 812 3 org.qt-project.QtCore 0x000000010789e0c7 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 471 4 org.qt-project.QtCore 0x00000001076ddc2c QThread::exec() + 140 5 org.qt-project.QtCore 0x00000001076deb3a 0x1076bc000 + 142138 6 libsystem_pthread.dylib 0x00007fff2035d8fc _pthread_start + 224 7 libsystem_pthread.dylib 0x00007fff20359443 thread_start + 15 Thread 0 crashed with X86 Thread State (64-bit): rax: 0x0000000000000000 rbx: 0x00007fb8db80c848 rcx: 0xc78a6768c259008a rdx: 0x0000000000000000 rdi: 0x00007fb8db82e2ac rsi: 0x00007ffee958d4b0 rbp: 0x00007ffee958d590 rsp: 0x00007ffee958d530 r8: 0x0000000000000004 r9: 0x00007fb8db82e200 r10: 0x0000000000000400 r11: 0xffffffb9f22a0dfc r12: 0x00000000000c0be0 r13: 0x00007fb8d9819630 r14: 0x0000000000000000 r15: 0x0000000000000000 rip: 0x00007fff32e978c7 rfl: 0x0000000000010206 cr2: 0x00000000000016a0 Logical CPU: 1 Error Code: 0x00000004 (no mapping for user data read) Trap Number: 14 ——————————————————————————————— Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000008 Exception Note: EXC_CORPSE_NOTIFY Termination Signal: Segmentation fault: 11 Termination Reason: Namespace SIGNAL, Code 0xb Terminating Process: exc handler [5603] VM Regions Near 0x8: --> __TEXT 103de9000-103f5d000 [ 1488K] r-x/r-x SM=COW /Applications/OurApp.app/Contents/MacOS/backend Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libcurl.4.dylib 0x00007fff32e93dd3 Curl_llist_insert_next + 88 1 libcurl.4.dylib 0x00007fff32e951f3 singlesocket + 498 2 libcurl.4.dylib 0x00007fff32e97a2d multi_socket + 546 3 libcurl.4.dylib 0x00007fff32e97ac9 curl_multi_socket_action + 38 4 backend 0x0000000103f1262d CurlMulti::curlSocketAction(int, int) + 45 5 backend 0x0000000103f125a0 CurlMulti::socketReadyWrite(int) + 32 6 backend 0x0000000103f14efe QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QSocketDescriptor>, void, void (CurlMulti::*)(int)>::call(void (CurlMulti::*)(int), CurlMulti*, void**) + 158 7 backend 0x0000000103f14e58 void QtPrivate::FunctionPointer<void (CurlMulti::*)(int)>::call<QtPrivate::List<QSocketDescriptor>, void>(void (CurlMulti::*)(int), CurlMulti*, void**) + 88 8 backend 0x0000000103f14d95 QtPrivate::QSlotObject<void (CurlMulti::*)(int), QtPrivate::List<QSocketDescriptor>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) + 165 9 org.qt-project.QtCore 0x0000000105062042 0x104e4b000 + 2191426 10 org.qt-project.QtCore 0x000000010506a48a QSocketNotifier::event(QEvent*) + 602 11 org.qt-project.QtCore 0x0000000105031608 QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) + 88 12 org.qt-project.QtCore 0x00000001050312b6 QCoreApplication::notifyInternal2(QObject*, QEvent*) + 166 13 org.qt-project.QtCore 0x00000001050901e3 QEventDispatcherUNIXPrivate::activateSocketNotifiers() + 99 14 org.qt-project.QtCore 0x0000000105090c6b QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 907 15 org.qt-project.QtCore 0x000000010502d6b7 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 471 16 org.qt-project.QtCore 0x0000000105031852 QCoreApplication::exec() + 130 17 backend 0x0000000103dee7ba main + 938 18 libdyld.dylib 0x00007fff20378f3d start + 1 Thread 1:: Qt bearer thread 0 libsystem_kernel.dylib 0x00007fff2032e9ca poll + 10 1 org.qt-project.QtCore 0x000000010508f45c qt_safe_poll(pollfd*, unsigned int, timespec const*) + 220 2 org.qt-project.QtCore 0x0000000105090bf6 QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 790 3 org.qt-project.QtCore 0x000000010502d6b7 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 471 4 org.qt-project.QtCore 0x0000000104e6b993 QThread::exec() + 131 5 org.qt-project.QtCore 0x0000000104e6c8a9 0x104e4b000 + 137385 6 libsystem_pthread.dylib 0x00007fff2035d8fc _pthread_start + 224 7 libsystem_pthread.dylib 0x00007fff20359443 thread_start + 15 Thread 2:: QNetworkAccessManager thread 0 libsystem_kernel.dylib 0x00007fff2032e9ca poll + 10 1 org.qt-project.QtCore 0x000000010508f3de qt_safe_poll(pollfd*, unsigned int, timespec const*) + 94 2 org.qt-project.QtCore 0x0000000105090bf6 QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 790 3 org.qt-project.QtCore 0x000000010502d6b7 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 471 4 org.qt-project.QtCore 0x0000000104e6b993 QThread::exec() + 131 5 org.qt-project.QtCore 0x0000000104e6c8a9 0x104e4b000 + 137385 6 libsystem_pthread.dylib 0x00007fff2035d8fc _pthread_start + 224 7 libsystem_pthread.dylib 0x00007fff20359443 thread_start + 15 Thread 3: 0 libsystem_pthread.dylib 0x00007fff20359420 start_wqthread + 0 Thread 0 crashed with X86 Thread State (64-bit): rax: 0x0000000000000003 rbx: 0x0000000000000001 rcx: 0x00007fca83054848 rdx: 0x0000000000000000 rdi: 0x00007fca81f25ef0 rsi: 0x0000000000000000 rbp: 0x00007ffeebe163b0 rsp: 0x00007ffeebe163b0 r8: 0x0000000000000010 r9: 0x00007fca83054800 r10: 0x0000000000000400 r11: 0x0000000000000206 r12: 0x0000000000000000 r13: 0x0000000000000027 r14: 0x00007fca80f0bc20 r15: 0x00007fca81f25ef0 rip: 0x00007fff32e93dd3 rfl: 0x0000000000010246 cr2: 0x0000000000000008 Logical CPU: 2 Error Code: 0x00000006 (no mapping for user data write) Trap Number: 14 Thanks, Frank
-- Unsubscribe: https://lists.haxx.se/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html