Crash in CertStore
Seems that the TrustStore is not thread safe, it should
hread 120 "jamid" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fff2d7fa640 (LWP 23767)]
__pthread_kill_implementation (no_tid=0, signo=6, threadid=140733956728384) at pthread_kill.c:44
44 pthread_kill.c: Aucun fichier ou dossier de ce type.
(gdb)
(gdb)
(gdb)
(gdb) bt
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140733956728384)
at pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=140733956728384)
at pthread_kill.c:80
#2 GI_pthread_kill (threadid=140733956728384, signo=signo@entry=6)
at pthread_kill.c:91
#3 0x00007ffff5bd2476 in __GI_raise (sig=sig@entry=6)
at ../sysdeps/posix/raise.c:26
#4 0x00007ffff5bb87b7 in __GI_abort () at abort.c:79
#5 0x00007ffff5c195e6 in __libc_message (action=action@entry=do_abort,
fmt=fmt@entry=0x7ffff5d6b13d "%s\n") at ../sysdeps/posix/libc_fatal.c:155
#6 0x00007ffff5c30adc in malloc_printerr (
str=str@entry=0x7ffff5d6dd18 "double free or corruption (fasttop)")
at malloc.c:5543
#7 0x00007ffff5c3239b in _int_free (av=0x7fffb0000020, p=0x7fffb008e920,
have_lock=0) at malloc.c:4426
#8 0x00007ffff5c34ce5 in GI_libc_free (mem=<optimized out>)
at malloc.c:3278
#9 0x00007ffff67fa1b6 in gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> > >::deallocate (this=0x7fffb004b0f0,
p=0x7fffb008e930, t=1) at /usr/include/c++/11/ext/new_allocator.h:145
#10 0x00007ffff67f914d in std::allocator_traits<std::allocator<std::_Rb_tree_nod--Type <RET> for more, q to quit, c to continue without paging--
e<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> > > >::deallocate (a=...,
p=0x7fffb008e930, n=1) at /usr/include/c++/11/bits/alloc_traits.h:492
#11 0x00007ffff67f7ca5 in std::_Rb_tree<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status>, std::_Select1st<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> >, std::less<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> > >::Mput_node (this=0x7fffb004b0f0, p=0x7fffb008e930)
at /usr/include/c++/11/bits/stl_tree.h:565
#12 0x00007ffff67f5a16 in std::_Rb_tree<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status>, std::_Select1st<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> >, std::less<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> > >::Mdrop_node (this=0x7fffb004b0f0, p=0x7fffb008e930)
at /usr/include/c++/11/bits/stl_tree.h:632
--Type <RET> for more, q to quit, c to continue without paging--
#13 0x00007ffff67f5fb4 in std::_Rb_tree<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status>, std::_Select1st<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> >, std::less<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> > >::Merase_aux (this=0x7fffb004b0f0, position=
{first = "\236P\352\a\371\177\000\000g(9G\257\255\334w29963211b997a2401b35dc5b", second = {allowed = true}})
at /usr/include/c++/11/bits/stl_tree.h:2485
#14 0x00007ffff67f2410 in std::_Rb_tree<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status>, std::_Select1st<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> >, std::less<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> > >::erase[abi:cxx11](std::_Rb_tree_iterator<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> >) (this=0x7fffb004b0f0, __position=
{first = "\236P\352\a\371\177\000\000g(9G\257\255\334w29963211b997a2401b35dc5b", second = {allowed = true}})
at /usr/include/c++/11/bits/stl_tree.h:1209
#15 0x00007ffff67ef6c3 in std::map<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jami::tls::TrustStore::Status, std::less<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> > >::erase[abi:cxx11](std::_Rb_tree_iterator<std::pair<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, jami::tls::TrustStore::Status> >) (this=0x7fffb004b0f0, __position=
{first = "\236P\352\a\371\177\000\000g(9G\257\255\334w29963211b997a2401b35dc5b", second = {allowed = true}})
at /usr/include/c++/11/bits/stl_map.h:1038
#16 0x00007ffff67ebd0f in jami::tls::TrustStore::updateKnownCerts (this=0x7fffb004b0f0) at ./security/certstore.cpp:633
#17 0x00007ffff67ebaed in jami::tls::TrustStore::isAllowed (this=0x7fffb004b0f0, crt=..., allowPublic=true)
at ./security/certstore.cpp:613
#18 0x00007ffff6990b3b in jami::ContactList::isAllowed (this=0x7fffb004b000, crt=..., allowPublic=true)
at jamidht/contact_list.h:95
#19 0x00007ffff69888db in jami::AccountManager::isAllowed (this=0x7fffb0006af0, crt=..., allowPublic=true)
at jamidht/account_manager.cpp:542
#20 0x00007ffff6987a53 in jami::AccountManager::onPeerCertificate (this=0x7fffb0006af0,
cert=std::shared_ptr<dht::crypto::Certificate> (use count 4, weak count 0) = {...}, allowPublic=true, account_id=...)
at jamidht/account_manager.cpp:389
#21 0x00007ffff680c033 in operator() (__closure=0x7fff2d7f6890,
cert=std::shared_ptr<dht::crypto::Certificate> (use count 4, weak count 0) = {...}) at jamidht/jamiaccount.cpp:2052
#22 0x00007ffff683e465 in std::invoke_impl<void, jami::JamiAccount::doRegister_()::<lambda(const DeviceId&)>::<lambda(const std::shared_ptr<dht::crypto::Certificate>&)>&, const std::shared_ptr<dht::crypto::Certificate>&>(std::invoke_other, struct {...} &)
(__f=...) at /usr/include/c++/11/bits/invoke.h:61
#23 0x00007ffff6835236 in std::invoke_r<void, jami::JamiAccount::doRegister_()::<lambda(const DeviceId&)>::<lambda(const std::shared_ptr<dht::crypto::Certificate>&)>&, const std::shared_ptr<dht::crypto::Certificate>&>(struct {...} &) (fn=...)
at /usr/include/c++/11/bits/invoke.h:111
#24 0x00007ffff682d787 in std::Function_handler<void(const std::shared_ptr<dht::crypto::Certificate>&), jami::JamiAccount::doRegister()::<lambda(const DeviceId&)>::<lambda(const std::shared_ptr<dht::crypto::Certificate>&)> >::Minvoke(const std::_Any_data &--Type <RET> for more, q to quit, c to continue without paging--
, const std::shared_ptr<dht::crypto::Certificate> &) (functor=...,
args#0=std::shared_ptr<dht::crypto::Certificate> (use count 4, weak count 0) = {...})
at /usr/include/c++/11/bits/std_function.h:291
#25 0x00007ffff69927c3 in std::function<void (std::shared_ptr<dht::crypto::Certificate> const&)>::operator()(std::shared_ptr<dht::crypto::Certificate> const&) const (this=0x7fff2d7f6890,
__args#0=std::shared_ptr<dht::crypto::Certificate> (use count 4, weak count 0) = {...})
at /usr/include/c++/11/bits/std_function.h:560
#26 0x00007ffff698862f in jami::AccountManager::findCertificate(dht::Hash<32ul> const&, std::function<void (std::shared_ptr<dht::crypto::Certificate> const&)>&&) (this=0x7fffb0006af0, id=..., cb=...) at jamidht/account_manager.cpp:513
#27 0x00007ffff680c216 in operator() (__closure=0x7ffe2c13f420, deviceId=...) at jamidht/jamiaccount.cpp:2049
#28 0x00007ffff683e545 in std::invoke_impl<bool, jami::JamiAccount::doRegister_()::<lambda(const DeviceId&)>&, const dht::Hash<32>&>(std::invoke_other, struct {...} &) (__f=...) at /usr/include/c++/11/bits/invoke.h:61
#29 0x00007ffff683539a in std::invoke_r<bool, jami::JamiAccount::doRegister_()::<lambda(const DeviceId&)>&, const dht::Hash<32>&>(struct {...} &) (fn=...) at /usr/include/c++/11/bits/invoke.h:114
#30 0x00007ffff682d896 in std::Function_handler<bool(const dht::Hash<32>&), jami::JamiAccount::doRegister()::<lambda(const DeviceId&)> >::Minvoke(const std::_Any_data &, const dht::Hash<32> &) (functor=..., args#0=...)
at /usr/include/c++/11/bits/std_function.h:291
#31 0x00007ffff68acb21 in std::function<bool (dht::Hash<32ul> const&)>::operator()(dht::Hash<32ul> const&) const (
this=0x7ffe2c13f420, __args#0=...) at /usr/include/c++/11/bits/std_function.h:560
#32 0x00007ffff689b3c6 in jami::ConnectionManager::Impl::onDhtPeerRequest (this=0x7ffe2c13f370, req=...)
at jamidht/connectionmanager.cpp:860
#33 0x00007ffff689788d in operator() (__closure=0x7ffdd00136c0,
cert=std::shared_ptr<dht::crypto::Certificate> (use count 4, weak count 0) = {...}) at jamidht/connectionmanager.cpp:680
#34 0x00007ffff68a4d6f in std::invoke_impl<void, jami::ConnectionManager::Impl::onDhtConnected(const dht::crypto::PublicKey&)::<lambda(jami::PeerConnectionRequest&&)>::<lambda()>::<lambda(const std::shared_ptr<dht::crypto::Certificate>&)>&, const std::shared_ptr<dht::crypto::Certificate>&>(std::invoke_other, struct {...} &) (__f=...) at /usr/include/c++/11/bits/invoke.h:61
#35 0x00007ffff68a1f28 in std::invoke_r<void, jami::ConnectionManager::Impl::onDhtConnected(const dht::crypto::PublicKey&)::<lambda(jami::PeerConnectionRequest&&)>::<lambda()>::<lambda(const std::shared_ptr<dht::crypto::Certificate>&)>&, const std::shared_ptr<dht::crypto::Certificate>&>(struct {...} &) (fn=...) at /usr/include/c++/11/bits/invoke.h:111
#36 0x00007ffff689fb79 in std::_Function_handler<void(const std::shared_ptr<dht::crypto::Certificate>&), jami::ConnectionManager::Impl::onDhtConnected(const dht::crypto::PublicKey&)::<lambda(jami::PeerConnectionRequest&&)>::<lambda()>::<lambda(const std::shared_ptr<dht::crypto::Certificate>&)> >::Minvoke(const std::_Any_data &, const std::shared_ptr<dht::crypto::Certificate> &) (
functor=..., args#0=std::shared_ptr<dht::crypto::Certificate> (use count 4, weak count 0) = {...})
at /usr/include/c++/11/bits/std_function.h:291
#37 0x00007ffff69927c3 in std::function<void (std::shared_ptr<dht::crypto::Certificate> const&)>::operator()(std::shared_ptr<dht::crypto::Certificate> const&) const (this=0x7fff2d7f6fb0,
__args#0=std::shared_ptr<dht::crypto::Certificate> (use count 4, weak count 0) = {...})
at /usr/include/c++/11/bits/std_function.h:560
#38 0x00007ffff698846b in jami::AccountManager::findCertificate(dht::Hash<20ul> const&, std::function<void (std::shared_ptr<dht::crypto::Certificate> const&)>&&) (this=0x7fffb0006af0, h=..., cb=...) at jamidht/account_manager.cpp:493
#39 0x00007ffff6810306 in jami::JamiAccount::findCertificate(dht::Hash<20ul> const&, std::function<void (std::shared_ptr<dht::crypto::Certificate> const&)>&&) (this=0x7fffb0000b70, h=..., cb=...) at jamidht/jamiaccount.cpp:2449
#40 0x00007ffff6897afe in operator() (__closure=0x7ffe441ff770) at jamidht/connectionmanager.cpp:671
#41 0x00007ffff68a4ed4 in std::invoke_impl<void, jami::ConnectionManager::Impl::onDhtConnected(const dht::crypto::PublicKey&)::<--Type <RET> for more, q to quit, c to continue without paging--
lambda(jami::PeerConnectionRequest&&)>::<lambda()>&>(std::invoke_other, struct {...} &) (__f=...)
at /usr/include/c++/11/bits/invoke.h:61
#42 0x00007ffff68a20b7 in std::invoke_r<void, jami::ConnectionManager::Impl::onDhtConnected(const dht::crypto::PublicKey&)::<lambda(jami::PeerConnectionRequest&&)>::<lambda()>&>(struct {...} &) (fn=...) at /usr/include/c++/11/bits/invoke.h:111
#43 0x00007ffff689fc71 in std::_Function_handler<void(), jami::ConnectionManager::Impl::onDhtConnected(const dht::crypto::PublicKey&)::<lambda(jami::PeerConnectionRequest&&)>::<lambda()> >::Minvoke(const std::_Any_data &) (__functor=...)
at /usr/include/c++/11/bits/std_function.h:291
#44 0x00007ffff6aed661 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<dht::ThreadPool::run(std::function<void ()>&&)::{lambda()#1}> > >::Mrun() () from /lib/libring.so.0
#45 0x00007ffff5ea8694 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#46 0x00007ffff5c24927 in start_thread (arg=<optimized out>) at pthread_create.c:435
#47 0x00007ffff5cb49e4 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:100
(gdb)