[ https://issues.apache.org/jira/browse/TS-3867?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alan M. Carroll reassigned TS-3867: ----------------------------------- Assignee: Alan M. Carroll > traffic_server seg faults in qsort call inside SSLContextStorage destructor > --------------------------------------------------------------------------- > > Key: TS-3867 > URL: https://issues.apache.org/jira/browse/TS-3867 > Project: Traffic Server > Issue Type: Bug > Components: Configuration, SSL > Reporter: Steven Feltner > Assignee: Alan M. Carroll > > With 9400+ ssl certs configured in ssl_multicert.config, traffic_server will > seg fault after anywhere from two mins to an hour. May be linked to issuing > a 'traffic_line -x' (particularly after removing an entry from > ssl_multicert.config), but does not always correlate. > #10863 0x00000000006e3d14 in qsort_VecRef<SSLCertContext> > (left=0x2ac740109950, right=0x2ac740062148, lt=0x6e1c70 > <SSLCtxCompare(SSLCertContext const&, SSLCertContext const&)>) at > ../../lib/ts/Vec.h:1035 > #10864 qsort_VecRef<SSLCertContext> (left=0x2ac740109950, > right=0x2ac740062148, lt=0x6e1c70 <SSLCtxCompare(SSLCertContext const&, > SSLCertContext const&)>) at ../../lib/ts/Vec.h:1035 > #10865 0x00000000006e3d14 in qsort_VecRef<SSLCertContext> > (left=0x2ac740109950, right=0x2ac740062100, lt=0x6e1c70 > <SSLCtxCompare(SSLCertContext const&, SSLCertContext const&)>) at > ../../lib/ts/Vec.h:1035 > #10866 qsort_VecRef<SSLCertContext> (left=0x2ac740109950, > right=0x2ac740062100, lt=0x6e1c70 <SSLCtxCompare(SSLCertContext const&, > SSLCertContext const&)>) at ../../lib/ts/Vec.h:1035 > #10867 0x00000000006e3d14 in qsort_VecRef<SSLCertContext> > (left=0x2ac740109950, right=0x2ac7400620b8, lt=0x6e1c70 > <SSLCtxCompare(SSLCertContext const&, SSLCertContext const&)>) at > ../../lib/ts/Vec.h:1035 > #10868 qsort_VecRef<SSLCertContext> (left=0x2ac740109950, > right=0x2ac7400620b8, lt=0x6e1c70 <SSLCtxCompare(SSLCertContext const&, > SSLCertContext const&)>) at ../../lib/ts/Vec.h:1035 > #10869 0x00000000006e3d14 in qsort_VecRef<SSLCertContext> > (left=0x2ac740109950, right=0x2ac740062070, lt=0x6e1c70 > <SSLCtxCompare(SSLCertContext const&, SSLCertContext const&)>) at > ../../lib/ts/Vec.h:1035 > #10870 qsort_VecRef<SSLCertContext> (left=0x2ac740109950, > right=0x2ac740062070, lt=0x6e1c70 <SSLCtxCompare(SSLCertContext const&, > SSLCertContext const&)>) at ../../lib/ts/Vec.h:1035 > #10871 0x00000000006e2f76 in qsort_VecRef<SSLCertContext> (this=0x2d91540, > __in_chrg=<value optimized out>) at ../../lib/ts/Vec.h:1035 > #10872 qsort (this=0x2d91540, __in_chrg=<value optimized out>) at > ../../lib/ts/Vec.h:1052 > #10873 SSLContextStorage::~SSLContextStorage (this=0x2d91540, > __in_chrg=<value optimized out>) at SSLCertLookup.cc:302 > #10874 0x00000000006e2fe9 in SSLCertLookup::~SSLCertLookup (this=0x2d91510, > __in_chrg=<value optimized out>) at SSLCertLookup.cc:181 > #10875 0x00000000006e3029 in SSLCertLookup::~SSLCertLookup (this=0x2d91510, > __in_chrg=<value optimized out>) at SSLCertLookup.cc:182 > #10876 0x0000000000646097 in ConfigInfoReleaser::handle_event > (this=0x2ac7f9450390) at ProxyConfig.cc:105 > #10877 0x0000000000721cf3 in handleEvent (this=0x2ac71e8bf010, e=0x18649c10, > calling_code=2) at I_Continuation.h:145 > #10878 EThread::process_event (this=0x2ac71e8bf010, e=0x18649c10, > calling_code=2) at UnixEThread.cc:128 > #10879 0x0000000000722891 in EThread::execute (this=0x2ac71e8bf010) at > UnixEThread.cc:207 > #10880 0x0000000000721112 in spawn_thread_internal (a=0x264bbf0) at > Thread.cc:85 > #10881 0x00000031780079d1 in start_thread () from /lib64/libpthread.so.0 > #10882 0x00000031778e88fd in clone () from /lib64/libc.so.6 > (gdb) f 10873 > #10873 SSLContextStorage::~SSLContextStorage (this=0x2d91540, > __in_chrg=<value optimized out>) at SSLCertLookup.cc:302 > 302 this->ctx_store.qsort(SSLCtxCompare); > (gdb) l > 297 > 298 SSLContextStorage::~SSLContextStorage() > 299 { > 300 // First sort the array so we can efficiently detect duplicates > 301 // and avoid the double free > 302 this->ctx_store.qsort(SSLCtxCompare); > 303 SSL_CTX *last_ctx = NULL; > 304 for (unsigned i = 0; i < this->ctx_store.length(); ++i) { > 305 if (this->ctx_store[i].ctx != last_ctx) { > 306 last_ctx = this->ctx_store[i].ctx; > (gdb) p this > $1 = (SSLContextStorage * const) 0x2d91540 > (gdb) p *this > $2 = {wildcards = {_vptr.Trie = 0x792750, static N_NODE_CHILDREN = 256, > m_root = {value = 0x0, occupied = false, rank = 0, children = {0x0 <repeats > 97 times>, 0xa867cf0, 0x0, 0x39bad80, 0x0, 0x6540130, 0x0, 0x0, 0x0, > 0x9955210, > 0x0, 0x0, 0x0, 0xa44d480, 0x3ccb3c0, 0x6a7f860, 0x0, 0x0, 0x0, 0x0, > 0x0, 0x61191a0, 0x0 <repeats 138 times>}}, m_value_list = > {<DLL<SSLContextStorage::ContextRef, > SSLContextStorage::ContextRef::Link_link>> = { > head = 0x39b8db0}, tail = 0xb9c48a0}}, hostnames = 0x2d91df0, > ctx_store = {n = 28603, i = 0, v = 0x2ac740062010, e = {{ctx = 0x2d91f80, opt > = SSLCertContext::OPT_NONE, keyblock = 0x2d940e0}, {ctx = 0x2d91f80, > opt = SSLCertContext::OPT_NONE, keyblock = 0x0}, {ctx = 0x2d91f80, > opt = SSLCertContext::OPT_NONE, keyblock = 0x0}, {ctx = 0x2d96ee0, opt = > SSLCertContext::OPT_NONE, keyblock = 0x2d92f10}}}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)