[Boost-bugs] [Boost C++ Libraries] #10756: AddressSanitizer container overflow in deadline_timer

Subject: [Boost-bugs] [Boost C++ Libraries] #10756: AddressSanitizer container overflow in deadline_timer
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-11-05 23:46:44


#10756: AddressSanitizer container overflow in deadline_timer
------------------------------+----------------------------
 Reporter: harjotgill@… | Owner: chris_kohlhoff
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: asio
  Version: Boost 1.56.0 | Severity: Problem
 Keywords: AddressSanitizer |
------------------------------+----------------------------
 I am scheduling 3 ASIO deadline timers back-to-back, wrapping them in a
 single strand. There is a single thread that services io_service->run(). I
 see the following "container-overflow" violation:

 {{{
 =================================================================
 ==16399==ERROR: AddressSanitizer: container-overflow on address
 0x60c000017550 at pc 0x0001088e1b3a bp 0x00010ea96510 sp 0x00010ea95cd0
 READ of size 8 at 0x60c000017550 thread T2
     #0 0x1088e1b39 in __asan_memcpy
 (/opt/local/libexec/llvm-3.6/lib/clang/3.6.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x24b39)
     #1 0x1084a286a in
 boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config>::time_count()
 const (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x10056186a)
     #2 0x1084a264e in
 boost::date_time::counted_time_system<boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config>
>::is_less(boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config>
 const&,
 boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config>
 const&) (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x10056164e)
     #3 0x10808ccec in
 boost::date_time::base_time<boost::posix_time::ptime,
 boost::date_time::counted_time_system<boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config>
> >::operator<(boost::posix_time::ptime const&) const
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x10014bcec)
     #4 0x10823e079 in
 boost::asio::time_traits<boost::posix_time::ptime>::less_than(boost::posix_time::ptime
 const&, boost::posix_time::ptime const&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1002fd079)
     #5 0x108297b9a in
 boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::down_heap(unsigned
 long) (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100356b9a)
     #6 0x108296b02 in
 boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::remove_timer(boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::per_timer_data&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100355b02)
     #7 0x1083bc9ef in
 boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::get_ready_timers(boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x10047b9ef)
     #8 0x1083ba430 in
 boost::asio::detail::timer_queue<boost::asio::time_traits<boost::posix_time::ptime>
>::get_ready_timers(boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100479430)
     #9 0x10960c74c in
 boost::asio::detail::timer_queue_set::get_ready_timers(boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x4374c)
     #10 0x10960c0cd in boost::asio::detail::kqueue_reactor::run(bool,
 boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x430cd)
     #11 0x10960b846 in
 boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&,
 boost::asio::detail::task_io_service_thread_info&,
 boost::system::error_code const&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x42846)
     #12 0x10960b3aa in
 boost::asio::detail::task_io_service::run(boost::system::error_code&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x423aa)
     #13 0x1095e2940 in boost::asio::io_service::run()
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x19940)
     #14 0x1095d01f7 in eximius::Platform::ProcessorRun(unsigned int)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x71f7)
     #15 0x1095e81fe in void boost::_bi::list1<boost::_bi::value<unsigned
 int> >::operator()<void (*)(unsigned int),
 boost::_bi::list0>(boost::_bi::type<void>, void (*&)(unsigned int),
 boost::_bi::list0&, int)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x1f1fe)
     #16 0x1095e817b in boost::_bi::bind_t<void, void (*)(unsigned int),
 boost::_bi::list1<boost::_bi::value<unsigned int> > >::operator()()
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x1f17b)
     #17 0x1095f5d7b in boost::detail::thread_data<boost::_bi::bind_t<void,
 void (*)(unsigned int), boost::_bi::list1<boost::_bi::value<unsigned int>
> > >::run() (/Users/hgill/Work/dpi/sp4/build_debug/install/lib
 /libgencore-platform.dylib+0x2cd7b)
     #18 0x10a477d04 in boost::(anonymous namespace)::thread_proxy(void*)
 (/opt/local/lib/libboost_thread-mt.dylib+0x2d04)
     #19 0x7fff93dbc2fb in _pthread_body
 (/usr/lib/system/libsystem_pthread.dylib+0x32fb)
     #20 0x7fff93dbc278 in _pthread_start
 (/usr/lib/system/libsystem_pthread.dylib+0x3278)
     #21 0x7fff93dba4b0 in thread_start
 (/usr/lib/system/libsystem_pthread.dylib+0x14b0)

 0x60c000017550 is located 80 bytes inside of 128-byte region
 [0x60c000017500,0x60c000017580)
 allocated by thread T0 here:
     #0 0x1088ea2ab in wrap__Znwm
 (/opt/local/libexec/llvm-3.6/lib/clang/3.6.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x2d2ab)
     #1 0x108248c8a in
 std::__1::__split_buffer<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry,
 std::__1::allocator<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry>&>::__split_buffer(unsigned
 long, unsigned long,
 std::__1::allocator<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry>&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100307c8a)
     #2 0x108241d93 in
 std::__1::__split_buffer<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry,
 std::__1::allocator<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry>&>::__split_buffer(unsigned
 long, unsigned long,
 std::__1::allocator<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry>&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100300d93)
     #3 0x108241498 in void
 std::__1::vector<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry,
 std::__1::allocator<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry>
>::__push_back_slow_path<boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry
 const>(boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::heap_entry
 const&) (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100300498)
     #4 0x10823c621 in
 boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::enqueue_timer(boost::posix_time::ptime
 const&,
 boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::per_timer_data&,
 boost::asio::detail::wait_op*)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1002fb621)
     #5 0x10823b51a in
 boost::asio::detail::timer_queue<boost::asio::time_traits<boost::posix_time::ptime>
>::enqueue_timer(boost::posix_time::ptime const&,
 boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::per_timer_data&,
 boost::asio::detail::wait_op*)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1002fa51a)
     #6 0x108238e17 in void
 boost::asio::detail::kqueue_reactor::schedule_timer<boost::asio::time_traits<boost::posix_time::ptime>
>(boost::asio::detail::timer_queue<boost::asio::time_traits<boost::posix_time::ptime>
>&, boost::asio::time_traits<boost::posix_time::ptime>::time_type const&,
 boost::asio::detail::timer_queue<boost::asio::time_traits<boost::posix_time::ptime>
>::per_timer_data&, boost::asio::detail::wait_op*)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1002f7e17)
     #7 0x1082375bc in void
 boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime>
>::async_wait<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running>
>(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime>
>::implementation_type&,
 boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running>&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1002f65bc)
     #8 0x108236536 in
 boost::asio::async_result<boost::asio::handler_type<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running>, void
 (boost::system::error_code)>::type>::type
 boost::asio::deadline_timer_service<boost::posix_time::ptime,
 boost::asio::time_traits<boost::posix_time::ptime>
>::async_wait<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running>
>(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime>
>::implementation_type&,
 boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running> const&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1002f5536)
     #9 0x108205259 in
 boost::asio::async_result<boost::asio::handler_type<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running>, void
 (boost::system::error_code)>::type>::type
 boost::asio::basic_deadline_timer<boost::posix_time::ptime,
 boost::asio::time_traits<boost::posix_time::ptime>,
 boost::asio::deadline_timer_service<boost::posix_time::ptime,
 boost::asio::time_traits<boost::posix_time::ptime> >
>::async_wait<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running>
>(boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,
 boost::_bi::bind_t<void, boost::_mfi::mf1<void,
 eximius::EximiusTimerHandler<boost::function<void ()> >,
 boost::system::error_code const&>,
 boost::_bi::list2<boost::_bi::value<eximius::EximiusTimerHandler<boost::function<void
 ()> >*>, boost::arg<1> (*)()> >,
 boost::asio::detail::is_continuation_if_running> const&)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1002c4259)
     #10 0x1081f95d6 in eximius::EximiusTimerHandler<boost::function<void
 ()> >::StartTimer() (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin
 /process-manager+0x1002b85d6)
     #11 0x108081a7c in int
 eximius::Platform::ScheduleTimer<boost::function<void ()>
>(boost::posix_time::time_duration const&, boost::function<void ()>
 const&, bool, char const*, unsigned int, unsigned int)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100140a7c)
     #12 0x107fe3143 in eximius::ProcessControl::StartTimers()
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x1000a2143)
     #13 0x107f75593 in eximius::ProcessControl::StartApplication()
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100034593)
     #14 0x1096bc66e in
 eximius::EximiusApplication::StartEximiusApplication()
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0xf366e)
     #15 0x108585856 in main
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x100644856)
     #16 0x7fff9077f5c8 in start (/usr/lib/system/libdyld.dylib+0x35c8)
     #17 0x0 (<unknown module>)

 Thread T2 created by T0 here:
     #0 0x1088e106f in wrap_pthread_create
 (/opt/local/libexec/llvm-3.6/lib/clang/3.6.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x2406f)
     #1 0x10a477c1b in boost::thread::start_thread_noexcept()
 (/opt/local/lib/libboost_thread-mt.dylib+0x2c1b)
     #2 0x1095f4d04 in boost::thread::start_thread()
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x2bd04)
     #3 0x1095f4c65 in boost::thread::thread<boost::_bi::bind_t<void, void
 (*)(unsigned int), boost::_bi::list1<boost::_bi::value<unsigned int> > >
>(boost::_bi::bind_t<void, void (*)(unsigned int),
 boost::_bi::list1<boost::_bi::value<unsigned int> > >,
 boost::disable_if_c<boost::thread_detail::is_convertible<boost::_bi::bind_t<void,
 void (*)(unsigned int), boost::_bi::list1<boost::_bi::value<unsigned int>
> >&, boost::detail::thread_move_t<boost::_bi::bind_t<void, void
 (*)(unsigned int), boost::_bi::list1<boost::_bi::value<unsigned int> > > >
>::value, boost::thread::dummy*>::type)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x2bc65)
     #4 0x1095e307a in boost::thread::thread<boost::_bi::bind_t<void, void
 (*)(unsigned int), boost::_bi::list1<boost::_bi::value<unsigned int> > >
>(boost::_bi::bind_t<void, void (*)(unsigned int),
 boost::_bi::list1<boost::_bi::value<unsigned int> > >,
 boost::disable_if_c<boost::thread_detail::is_convertible<boost::_bi::bind_t<void,
 void (*)(unsigned int), boost::_bi::list1<boost::_bi::value<unsigned int>
> >&, boost::detail::thread_move_t<boost::_bi::bind_t<void, void
 (*)(unsigned int), boost::_bi::list1<boost::_bi::value<unsigned int> > > >
>::value, boost::thread::dummy*>::type)
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x1a07a)
     #5 0x1095da31f in eximius::Platform::Initialize()
 (/Users/hgill/Work/dpi/sp4/build_debug/install/lib/libgencore-
 platform.dylib+0x1131f)
     #6 0x1085803a8 in main
 (/Users/hgill/Work/dpi/sp4/build_debug/install/./bin/process-
 manager+0x10063f3a8)
     #7 0x7fff9077f5c8 in start (/usr/lib/system/libdyld.dylib+0x35c8)
     #8 0x0 (<unknown module>)

 SUMMARY: AddressSanitizer: container-overflow ??:0 __asan_memcpy
 Shadow bytes around the buggy address:
   0x1c1800002e50: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
   0x1c1800002e60: fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa
   0x1c1800002e70: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
   0x1c1800002e80: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
   0x1c1800002e90: fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa
 =>0x1c1800002ea0: 00 00 00 00 00 00 00 00 00 00[fc]fc fc fc fc fc
   0x1c1800002eb0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
   0x1c1800002ec0: fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa fa
   0x1c1800002ed0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
   0x1c1800002ee0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
   0x1c1800002ef0: fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa
 Shadow byte legend (one shadow byte represents 8 application bytes):
   Addressable: 00
   Partially addressable: 01 02 03 04 05 06 07
   Heap left redzone: fa
   Heap right redzone: fb
   Freed heap region: fd
   Stack left redzone: f1
   Stack mid redzone: f2
   Stack right redzone: f3
   Stack partial redzone: f4
   Stack after return: f5
   Stack use after scope: f8
   Global redzone: f9
   Global init order: f6
   Poisoned by user: f7
   Container overflow: fc
   Array cookie: ac
   ASan internal: fe
 ==16399==ABORTING
 }}}

 Somehow, the problem goes away when I schedule < 3 timers.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/10756>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:17 UTC