kea can crash when receive gibberish over TCP channel
- start Kea + bulk lease query
- open connection (one TCP connection is enough) and send a lot of incorrect data (mine was correct message from other test with replaced byte that coded message type and multiplied 50 times)
2022-12-22 05:18:31.049 INFO [kea-dhcp6.dhcp6/9716.140037995065216] DHCP6_STARTED Kea DHCPv6 server version 2.3.4-git started
2022-12-22 05:25:19.307 DEBUG [kea-dhcp6.tcp/9716.140037960111872] TCP_REQUEST_RECEIVE_START start receiving request from 2001:db8:1::2000 with timeout 3000
2022-12-22 05:25:19.309 DEBUG [kea-dhcp6.tcp/9716.140037960111872] TCP_DATA_RECEIVED received 9606 bytes from 2001:db8:1::2000
2022-12-22 05:25:19.309 DEBUG [kea-dhcp6.tcp/9716.140037960111872] TCP_CLIENT_REQUEST_RECEIVED received TCP request from 2001:db8:1::2000
2022-12-22 05:25:19.309 DEBUG [kea-dhcp6.lease-query-hooks/9716.140037960111872] BULK_LEASE_QUERY6_UNSUPPORTED_MSG_TYPE Dropping packet with an unsupported DHCPv6 message type received from: 2001:db8:1::2000, details: localAddr=[::]:0 remoteAddr=[::]:0
msgtype=0(UNKNOWN), transid=0x1
No relays traversed.
kea-dhcp6: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: typename boost::detail::sp_member_access<T>::type boost::shared_ptr<T>::operator->() const [with T = isc::lease_query::BlqQuery; typename boost::detail::sp_member_access<T>::type = isc::lease_query::BlqQuery*]: Assertion `px != 0' failed.
Aborted
BT:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/home/wlodek/installed/git/sbin/kea-dhcp6 -c /home/wlodek/installed/git/etc/kea'.
Program terminated with signal SIGABRT, Aborted.
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7f5d20de1700 (LWP 9721))]
(gdb) thread apply all bt
Thread 13 (Thread 0x7f5d1e5dc700 (LWP 9726)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x7f5d243553b0 <isc::util::MultiThreadingMgr::instance()::manager+208>) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>, cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d24314819 in std::condition_variable::wait<isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}>(std::unique_lock<std::mutex>&, isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}) (__p=..., __lock=..., this=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at /usr/include/c++/10/condition_variable:111
#5 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop() (this=0x7f5d24355310 <isc::util::MultiThreadingMgr::instance()::manager+48>) at ../../../src/lib/util/thread_pool.h:345
#6 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::run() (this=0x7f5d243552f8 <isc::util::MultiThreadingMgr::instance()::manager+24>) at ../../../src/lib/util/thread_pool.h:494
#7 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#9 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 12 (Thread 0x7f5d205e0700 (LWP 9722)):
#0 0x00007f5d23ecde16 in epoll_wait (epfd=20, events=events@entry=0x7f5d205df480, maxevents=maxevents@entry=128, timeout=-1) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
#1 0x00007f5d24858004 in boost::asio::detail::epoll_reactor::run (this=0x560e83d0a570, usec=<optimized out>, ops=...) at /usr/include/boost/asio/detail/impl/epoll_reactor.ipp:471
#2 0x00007f5d248667f7 in boost::asio::detail::scheduler::do_run_one (this=0x560e83cd7380, lock=..., this_thread=..., ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:465
#3 0x00007f5d245fe419 in boost::asio::detail::scheduler::run (this=0x560e83cd7380, ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:204
#4 0x00007f5d245fee44 in boost::asio::io_context::run (this=<optimized out>, this=<optimized out>) at /usr/include/boost/asio/impl/io_context.ipp:63
#5 isc::asiolink::IOServiceImpl::run (this=<optimized out>) at io_service.cc:40
#6 isc::asiolink::IOService::run (this=<optimized out>) at io_service.cc:115
#7 0x00007f5d246045db in isc::asiolink::IoServiceThreadPool::threadWork (this=0x560e83d0a700) at io_service_thread_pool.cc:219
#8 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#9 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#10 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 11 (Thread 0x7f5d21f29700 (LWP 9719)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x560e83c7cff0) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x560e83c7cf70, cond=0x560e83c7cfc8) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x560e83c7cfc8, mutex=0x560e83c7cf70) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d237e1a29 in progschj::ThreadPool::emplace_back_worker(unsigned long)::{lambda()#1}::operator()() const () from /usr/lib/x86_64-linux-gnu/liblog4cplus-2.0.so.3
#5 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 10 (Thread 0x7f5d22f2b700 (LWP 9717)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x560e83c7cff0) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x560e83c7cf70, cond=0x560e83c7cfc8) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x560e83c7cfc8, mutex=0x560e83c7cf70) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d237e1a29 in progschj::ThreadPool::emplace_back_worker(unsigned long)::{lambda()#1}::operator()() const () from /usr/lib/x86_64-linux-gnu/liblog4cplus-2.0.so.3
#5 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 9 (Thread 0x7f5d22f36f80 (LWP 9716)):
#0 0x00007f5d23ec42a3 in __GI___select (nfds=19, readfds=readfds@entry=0x7ffd573df0d0, writefds=writefds@entry=0x0, exceptfds=exceptfds@entry=0x0, timeout=timeout@entry=0x7ffd573df070) at ../sysdeps/unix/sysv/linux/select.c:41
#1 0x00007f5d246ea045 in isc::dhcp::IfaceMgr::receive6Direct (this=0x560e83cd75e0, timeout_sec=1, timeout_usec=0) at iface_mgr.cc:1471
#2 0x00007f5d246eabf5 in isc::dhcp::IfaceMgr::receive6 (this=<optimized out>, timeout_sec=timeout_sec@entry=1, timeout_usec=timeout_usec@entry=0) at iface_mgr.cc:1411
#3 0x0000560e832e9606 in isc::dhcp::Dhcpv6Srv::receivePacket (timeout=1, this=0x7ffd573df670) at dhcp6_srv.cc:311
#4 isc::dhcp::Dhcpv6Srv::run_one (this=0x7ffd573df670) at dhcp6_srv.cc:637
#5 0x0000560e832e9ad8 in isc::dhcp::Dhcpv6Srv::run (this=0x7ffd573df670) at dhcp6_srv.cc:604
#6 0x0000560e832c4e18 in main (argc=<optimized out>, argv=0x7ffd573df670) at main.cc:270
Thread 8 (Thread 0x7f5d1f5de700 (LWP 9724)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x560e83cd7418) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x560e83cd73b8, cond=0x560e83cd73f0) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=cond@entry=0x560e83cd73f0, mutex=0x560e83cd73b8) at pthread_cond_wait.c:638
#3 0x00007f5d24866a12 in boost::asio::detail::posix_event::wait<boost::asio::detail::conditionally_enabled_mutex::scoped_lock> (lock=..., this=0x560e83cd73f0) at /usr/include/boost/asio/detail/conditionally_enabled_mutex.hpp:98
#4 boost::asio::detail::conditionally_enabled_event::wait (lock=..., this=0x560e83cd73e8) at /usr/include/boost/asio/detail/conditionally_enabled_event.hpp:97
#5 boost::asio::detail::scheduler::do_run_one (this=0x560e83cd7380, lock=..., this_thread=..., ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:490
#6 0x00007f5d245fe419 in boost::asio::detail::scheduler::run (this=0x560e83cd7380, ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:204
#7 0x00007f5d245fee44 in boost::asio::io_context::run (this=<optimized out>, this=<optimized out>) at /usr/include/boost/asio/impl/io_context.ipp:63
#8 isc::asiolink::IOServiceImpl::run (this=<optimized out>) at io_service.cc:40
#9 isc::asiolink::IOService::run (this=<optimized out>) at io_service.cc:115
#10 0x00007f5d246045db in isc::asiolink::IoServiceThreadPool::threadWork (this=0x560e83d0a700) at io_service_thread_pool.cc:219
#11 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#12 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#13 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 7 (Thread 0x7f5d1fddf700 (LWP 9723)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x560e83cd741c) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x560e83cd73b8, cond=0x560e83cd73f0) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=cond@entry=0x560e83cd73f0, mutex=0x560e83cd73b8) at pthread_cond_wait.c:638
#3 0x00007f5d24866a12 in boost::asio::detail::posix_event::wait<boost::asio::detail::conditionally_enabled_mutex::scoped_lock> (lock=..., this=0x560e83cd73f0) at /usr/include/boost/asio/detail/conditionally_enabled_mutex.hpp:98
#4 boost::asio::detail::conditionally_enabled_event::wait (lock=..., this=0x560e83cd73e8) at /usr/include/boost/asio/detail/conditionally_enabled_event.hpp:97
#5 boost::asio::detail::scheduler::do_run_one (this=0x560e83cd7380, lock=..., this_thread=..., ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:490
#6 0x00007f5d245fe419 in boost::asio::detail::scheduler::run (this=0x560e83cd7380, ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:204
#7 0x00007f5d245fee44 in boost::asio::io_context::run (this=<optimized out>, this=<optimized out>) at /usr/include/boost/asio/impl/io_context.ipp:63
#8 isc::asiolink::IOServiceImpl::run (this=<optimized out>) at io_service.cc:40
#9 isc::asiolink::IOService::run (this=<optimized out>) at io_service.cc:115
#10 0x00007f5d246045db in isc::asiolink::IoServiceThreadPool::threadWork (this=0x560e83d0a700) at io_service_thread_pool.cc:219
#11 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#12 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#13 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 6 (Thread 0x7f5d1d5da700 (LWP 9728)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x7f5d243553b0 <isc::util::MultiThreadingMgr::instance()::manager+208>) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>, cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d24314819 in std::condition_variable::wait<isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}>(std::unique_lock<std::mutex>&, isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}) (__p=..., __lock=..., this=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at /usr/include/c++/10/condition_variable:111
#5 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop() (this=0x7f5d24355310 <isc::util::MultiThreadingMgr::instance()::manager+48>) at ../../../src/lib/util/thread_pool.h:345
#6 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::run() (this=0x7f5d243552f8 <isc::util::MultiThreadingMgr::instance()::manager+24>) at ../../../src/lib/util/thread_pool.h:494
#7 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#9 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 5 (Thread 0x7f5d1eddd700 (LWP 9725)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x7f5d243553b0 <isc::util::MultiThreadingMgr::instance()::manager+208>) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>, cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d24314819 in std::condition_variable::wait<isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}>(std::unique_lock<std::mutex>&, isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}) (__p=..., __lock=..., this=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at /usr/include/c++/10/condition_variable:111
#5 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop() (this=0x7f5d24355310 <isc::util::MultiThreadingMgr::instance()::manager+48>) at ../../../src/lib/util/thread_pool.h:345
#6 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::run() (this=0x7f5d243552f8 <isc::util::MultiThreadingMgr::instance()::manager+24>) at ../../../src/lib/util/thread_pool.h:494
#7 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#9 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 4 (Thread 0x7f5d2272a700 (LWP 9718)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x560e83c7cff0) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x560e83c7cf70, cond=0x560e83c7cfc8) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x560e83c7cfc8, mutex=0x560e83c7cf70) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d237e1a29 in progschj::ThreadPool::emplace_back_worker(unsigned long)::{lambda()#1}::operator()() const () from /usr/lib/x86_64-linux-gnu/liblog4cplus-2.0.so.3
#5 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 3 (Thread 0x7f5d1dddb700 (LWP 9727)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x7f5d243553b0 <isc::util::MultiThreadingMgr::instance()::manager+208>) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>, cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>, mutex=0x7f5d24355360 <isc::util::MultiThreadingMgr::instance()::manager+128>) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d24314819 in std::condition_variable::wait<isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}>(std::unique_lock<std::mutex>&, isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop()::{lambda()#1}) (__p=..., __lock=..., this=0x7f5d24355388 <isc::util::MultiThreadingMgr::instance()::manager+168>) at /usr/include/c++/10/condition_variable:111
#5 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::ThreadPoolQueue<boost::shared_ptr<std::function<void ()> >, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::pop() (this=0x7f5d24355310 <isc::util::MultiThreadingMgr::instance()::manager+48>) at ../../../src/lib/util/thread_pool.h:345
#6 isc::util::ThreadPool<std::function<void ()>, std::deque<boost::shared_ptr<std::function<void ()> >, std::allocator<boost::shared_ptr<std::function<void ()> > > > >::run() (this=0x7f5d243552f8 <isc::util::MultiThreadingMgr::instance()::manager+24>) at ../../../src/lib/util/thread_pool.h:494
#7 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#9 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 2 (Thread 0x7f5d21728700 (LWP 9720)):
#0 futex_wait_cancelable (private=0, expected=0, futex_word=0x560e83c7cff0) at ../sysdeps/nptl/futex-internal.h:186
#1 __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x560e83c7cf70, cond=0x560e83c7cfc8) at pthread_cond_wait.c:508
#2 __pthread_cond_wait (cond=0x560e83c7cfc8, mutex=0x560e83c7cf70) at pthread_cond_wait.c:638
#3 0x00007f5d241cf90c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f5d237e1a29 in progschj::ThreadPool::emplace_back_worker(unsigned long)::{lambda()#1}::operator()() const () from /usr/lib/x86_64-linux-gnu/liblog4cplus-2.0.so.3
--Type <RET> for more, q to quit, c to continue without paging--
#5 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 1 (Thread 0x7f5d20de1700 (LWP 9721)):
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007f5d23df3537 in __GI_abort () at abort.c:79
#2 0x00007f5d23df340f in __assert_fail_base (fmt=0x7f5d23f6b6a8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x7f5d20f0e55c "px != 0", file=0x7f5d20f0e148 "/usr/include/boost/smart_ptr/shared_ptr.hpp", line=728, function=<optimized out>) at assert.c:92
#3 0x00007f5d23e02662 in __GI___assert_fail (assertion=assertion@entry=0x7f5d20f0e55c "px != 0", file=file@entry=0x7f5d20f0e148 "/usr/include/boost/smart_ptr/shared_ptr.hpp", line=line@entry=728, function=function@entry=0x7f5d20f0ee60 "typename boost::detail::sp_member_access<T>::type boost::shared_ptr<T>::operator->() const [with T = isc::lease_query::BlqQuery; typename boost::detail::sp_member_access<T>::type = isc::lease_query::B"...) at assert.c:101
#4 0x00007f5d20ee2f93 in boost::shared_ptr<isc::lease_query::BlqQuery>::operator-> (this=<optimized out>) at /usr/include/boost/smart_ptr/shared_ptr.hpp:728
#5 0x00007f5d20ee6283 in boost::shared_ptr<isc::lease_query::BlqQuery>::operator-> (this=<synthetic pointer>) at /usr/include/boost/smart_ptr/detail/shared_count.hpp:443
#6 isc::lease_query::LeaseQueryConnection::requestReceived (this=0x560e83d0b1e0, request=...) at lease_query_connection.cc:119
#7 0x00007f5d20e70371 in isc::tcp::TcpConnection::postData (this=0x560e83d0b1e0, request=..., input_data=std::vector of length 0, capacity 9606) at tcp_connection.cc:414
#8 0x00007f5d20e70688 in isc::tcp::TcpConnection::socketReadCallback (this=0x560e83d0b1e0, request=..., ec=..., length=<optimized out>) at tcp_connection.cc:380
#9 0x00007f5d20e7798f in std::__invoke_impl<void, void (isc::tcp::TcpConnection::*&)(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long), boost::shared_ptr<isc::tcp::TcpConnection>&, boost::shared_ptr<isc::tcp::TcpRequest>&, boost::system::error_code, unsigned long> (__t=..., __t=..., __f=<optimized out>) at /usr/include/c++/10/bits/invoke.h:73
#10 std::__invoke<void (isc::tcp::TcpConnection::*&)(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long), boost::shared_ptr<isc::tcp::TcpConnection>&, boost::shared_ptr<isc::tcp::TcpRequest>&, boost::system::error_code, unsigned long> (__fn=<optimized out>) at /usr/include/c++/10/bits/invoke.h:95
#11 std::_Bind<void (isc::tcp::TcpConnection::*(boost::shared_ptr<isc::tcp::TcpConnection>, boost::shared_ptr<isc::tcp::TcpRequest>, std::_Placeholder<1>, std::_Placeholder<2>))(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long)>::__call<void, boost::system::error_code&&, unsigned long&&, 0ul, 1ul, 2ul, 3ul>(std::tuple<boost::system::error_code&&, unsigned long&&>&&, std::_Index_tuple<0ul, 1ul, 2ul, 3ul>) (__args=..., this=<optimized out>) at /usr/include/c++/10/functional:416
#12 std::_Bind<void (isc::tcp::TcpConnection::*(boost::shared_ptr<isc::tcp::TcpConnection>, boost::shared_ptr<isc::tcp::TcpRequest>, std::_Placeholder<1>, std::_Placeholder<2>))(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long)>::operator()<boost::system::error_code, unsigned long, void>(boost::system::error_code&&, unsigned long&&) (this=<optimized out>) at /usr/include/c++/10/functional:499
#13 std::__invoke_impl<void, std::_Bind<void (isc::tcp::TcpConnection::*(boost::shared_ptr<isc::tcp::TcpConnection>, boost::shared_ptr<isc::tcp::TcpRequest>, std::_Placeholder<1>, std::_Placeholder<2>))(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long)>&, boost::system::error_code, unsigned long>(std::__invoke_other, std::_Bind<void (isc::tcp::TcpConnection::*(boost::shared_ptr<isc::tcp::TcpConnection>, boost::shared_ptr<isc::tcp::TcpRequest>, std::_Placeholder<1>, std::_Placeholder<2>))(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long)>&, boost::system::error_code&&, unsigned long&&) (__f=...) at /usr/include/c++/10/bits/invoke.h:60
#14 std::__invoke_r<void, std::_Bind<void (isc::tcp::TcpConnection::*(boost::shared_ptr<isc::tcp::TcpConnection>, boost::shared_ptr<isc::tcp::TcpRequest>, std::_Placeholder<1>, std::_Placeholder<2>))(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long)>&, boost::system::error_code, unsigned long>(std::_Bind<void (isc::tcp::TcpConnection::*(boost::shared_ptr<isc::tcp::TcpConnection>, boost::shared_ptr<isc::tcp::TcpRequest>, std::_Placeholder<1>, std::_Placeholder<2>))(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long)>&, boost::system::error_code&&, unsigned long&&) (__fn=...) at /usr/include/c++/10/bits/invoke.h:153
#15 std::_Function_handler<void (boost::system::error_code, unsigned long), std::_Bind<void (isc::tcp::TcpConnection::*(boost::shared_ptr<isc::tcp::TcpConnection>, boost::shared_ptr<isc::tcp::TcpRequest>, std::_Placeholder<1>, std::_Placeholder<2>))(boost::shared_ptr<isc::tcp::TcpRequest>, boost::system::error_code, unsigned long)> >::_M_invoke(std::_Any_data const&, boost::system::error_code&&, unsigned long&&) (__functor=..., __args#0=..., __args#1=<optimized out>) at /usr/include/c++/10/bits/std_function.h:291
#16 0x00007f5d20e6d35c in std::function<void (boost::system::error_code, unsigned long)>::operator()(boost::system::error_code, unsigned long) const (__args#1=<optimized out>, __args#0=..., this=0x7f5d20de0a00) at /usr/include/c++/10/bits/std_function.h:622
#17 isc::tcp::TcpConnection::SocketCallback::operator() (this=this@entry=0x7f5d20de0a00, ec=..., length=<optimized out>) at tcp_connection.cc:48
#18 0x00007f5d20e837e0 in boost::asio::detail::binder2<isc::tcp::TcpConnection::SocketCallback, boost::system::error_code, unsigned long>::operator() (this=0x7f5d20de0a00) at /usr/include/boost/asio/detail/bind_handler.hpp:180
#19 boost::asio::asio_handler_invoke<boost::asio::detail::binder2<isc::tcp::TcpConnection::SocketCallback, boost::system::error_code, unsigned long> > (function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:88
#20 boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<isc::tcp::TcpConnection::SocketCallback, boost::system::error_code, unsigned long>, isc::tcp::TcpConnection::SocketCallback> (context=..., function=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
#21 boost::asio::detail::handler_work<isc::tcp::TcpConnection::SocketCallback, boost::asio::execution::any_executor<boost::asio::execution::context_as_t<boost::asio::execution_context&>, boost::asio::execution::detail::blocking::never_t<0>, boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0> > >, void>::complete<boost::asio::detail::binder2<isc::tcp::TcpConnection::SocketCallback, boost::system::error_code, unsigned long> > (this=0x7f5d20de09a0, handler=..., function=...) at /usr/include/boost/asio/detail/handler_work.hpp:425
#22 boost::asio::detail::handler_work<isc::tcp::TcpConnection::SocketCallback, boost::asio::execution::any_executor<boost::asio::execution::context_as_t<boost::asio::execution_context&>, boost::asio::execution::detail::blocking::never_t<0>, boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0> > >, void>::complete<boost::asio::detail::binder2<isc::tcp::TcpConnection::SocketCallback, boost::system::error_code, unsigned long> > (handler=..., function=..., this=0x7f5d20de09a0) at /usr/include/boost/asio/detail/handler_work.hpp:418
#23 boost::asio::detail::reactive_socket_recv_op<boost::asio::mutable_buffers_1, isc::tcp::TcpConnection::SocketCallback, boost::asio::execution::any_executor<boost::asio::execution::context_as_t<boost::asio::execution_context&>, boost::asio::execution::detail::blocking::never_t<0>, boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0> >, boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0> > > >::do_complete (owner=0x560e83cd7380, base=<optimized out>) at /usr/include/boost/asio/detail/reactive_socket_recv_op.hpp:145
#24 0x00007f5d24866b04 in boost::asio::detail::scheduler_operation::complete (bytes_transferred=<optimized out>, ec=..., owner=0x560e83cd7380, this=0x7f5d18000b60) at /usr/include/boost/asio/detail/scheduler_operation.hpp:40
#25 boost::asio::detail::scheduler::do_run_one (this=0x560e83cd7380, lock=..., this_thread=..., ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:481
#26 0x00007f5d245fe419 in boost::asio::detail::scheduler::run (this=0x560e83cd7380, ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:204
#27 0x00007f5d245fee44 in boost::asio::io_context::run (this=<optimized out>, this=<optimized out>) at /usr/include/boost/asio/impl/io_context.ipp:63
#28 isc::asiolink::IOServiceImpl::run (this=<optimized out>) at io_service.cc:40
#29 isc::asiolink::IOService::run (this=<optimized out>) at io_service.cc:115
#30 0x00007f5d246045db in isc::asiolink::IoServiceThreadPool::threadWork (this=0x560e83d0a700) at io_service_thread_pool.cc:219
#31 0x00007f5d241d4ed0 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#32 0x00007f5d24cb0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#33 0x00007f5d23ecdaef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb)
premium:
wlodek@debian9-64-2:premium (master) $ git show
commit dab79577ff9a03d00347f4b7eb00f54b8655f78b (HEAD -> master, origin/master, origin/HEAD, origin/2662-improve-bad-request-error-handling-in-leasequeryconnection)
Author: Francis Dupont <fdupont@isc.org>
Date: Wed Dec 21 11:10:17 2022 +0100
[#2662] Added a log on dequeue query
core:
wlodek@debian9-64-2:premium (master) $ git show
commit dab79577ff9a03d00347f4b7eb00f54b8655f78b (HEAD -> master, origin/master, origin/HEAD, origin/2662-improve-bad-request-error-handling-in-leasequeryconnection)
Author: Francis Dupont <fdupont@isc.org>
Date: Wed Dec 21 11:10:17 2022 +0100
[#2662] Added a log on dequeue query
config:
{
"Dhcp6": {
"option-data": [],
"hooks-libraries": [
{
"library": "/home/wlodek/installed/git/lib/kea/hooks/libdhcp_lease_query.so",
"parameters": {
"requesters": [
"2001:db8:1::2000"
],
"advanced": {
"bulk-query-enabled": true,
"active-query-enabled": false,
"extended-info-tables-enabled": true,
"lease-query-ip": "2001:db8:1::1000",
"lease-query-tcp-port": 9000,
"max-requester-connections": 10,
"max-concurrent-queries": 4,
"max-requester-idle-time": 3000,
"max-leases-per-fetch": 5
}
}
},
{
"library": "/home/wlodek/installed/git/lib/kea/hooks/libdhcp_lease_cmds.so"
}
],
"shared-networks": [],
"subnet6": [
{
"subnet": "2001:db8:1::/64",
"pools": [
{
"pool": "2001:db8:1::1-2001:db8:1::100"
}
],
"interface": "enp0s9",
"pd-pools": [
{
"delegated-len": 96,
"prefix": "2001:db8:3::",
"prefix-len": 90
}
]
}
],
"interfaces-config": {
"interfaces": [
"enp0s9"
]
},
"store-extended-info": true,
"control-socket": {
"socket-type": "unix",
"socket-name": "/home/wlodek/installed/git/var/run/kea/control_socket"
},
"expired-leases-processing": {
"flush-reclaimed-timer-wait-time": 50000,
"reclaim-timer-wait-time": 50000
},
"renew-timer": 6000000,
"rebind-timer": 7000000,
"preferred-lifetime": 8000000,
"valid-lifetime": 9000000,
"loggers": [
{
"name": "kea-dhcp6",
"output_options": [
{
"output": "stdout"
}
],
"severity": "DEBUG",
"debuglevel": 99
}
],
"lease-database": {
"type": "memfile"
},
"multi-threading": {
"enable-multi-threading": true,
"thread-pool-size": 4,
"packet-queue-size": 16
}
}
}
script to reproduce:
[...removed...]
as you can see message
message_type
are defined twice, the latter is crashing Kea. If you comment those out Kea will reply correctly (and than scapy changes are needed for correct print)