Re: Very intermittent segmentation fault with boost::multiprecision

tjisana (泰志) via Boost-users <[email protected]>
Newsgroups gmane.comp.lib.boost.user
Message-ID <CAGXaPtANreTNc_w_vXTTe2hPoM3temp-WD-9aS4LLKi3D-TZbQ@mail.gmail.com>
I was thinking of revisiting cpp_dec_float for that reason too - thanks for
noting that.  Here's the result with address sanitizer ...

=================================================================
==15679==ERROR: AddressSanitizer: heap-use-after-free on address
0x60600000ea48 at pc 0x0000004228c3 bp 0x7f2e041f16a0 sp 0x7f2e041f1698
READ of size 40 at 0x60600000ea48 thread T0
    #0 0x4228c2 in boost::multiprecision::backends::cpp_dec_float<50u, int,
void>::cpp_dec_float(boost::multiprecision::backends::cpp_dec_float<50u,
int, void> const&) /usr/include/boost/multiprecision/cpp_dec_float.hpp:210
    #1 0x427592 in
boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u,
int, void>,
(boost::multiprecision::expression_template_option)1>::number(boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u,
int, void>, (boost::multiprecision::expression_template_option)1> const&)
/usr/include/boost/multiprecision/number.hpp:47
    #2 0x4168ae in
transform<__gnu_cxx::__normal_iterator<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
>*,
std::vector<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
> > >,
std::back_insert_iterator<std::vector<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50>
> > >, higher_high::calculate(const positions_map&, const
last_tick&)::<lambda(boost::multiprecision::cpp_dec_float_50)> >
/usr/include/c++/11/bits/stl_algo.h:4296
    #3 0x410ca3 in
higher_high::calculate(std::unordered_map<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, trade_position,
std::hash<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, std::equal_to<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, trade_position> > >
const&, last_tick const&) ../src/higher_high.cpp:197
    #4 0x4aca5d in operator() ../src/ib_trading_engine.cpp:228
    #5 0x4c11d1 in operator()
/usr/include/boost/coroutine2/detail/push_control_block_cc.ipp:90
    #6 0x4c27e5 in __invoke_impl<boost::context::fiber,
boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/bits/invoke.h:61
    #7 0x4c25d0 in
__invoke<boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/bits/invoke.h:97
    #8 0x4c2537 in
invoke<boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>&,
boost::context::fiber> /usr/include/c++/11/functional:98
    #9 0x4c2297 in run /usr/include/boost/context/fiber_fcontext.hpp:140
    #10 0x4c2043 in
fiber_entry<boost::context::detail::fiber_record<boost::context::fiber,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
boost::coroutines2::detail::push_coroutine<last_tick>::control_block::control_block<boost::context::basic_fixedsize_stack<boost::context::stack_traits>,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>
>(boost::context::preallocated,
boost::context::basic_fixedsize_stack<boost::context::stack_traits>&&,
ib_trading_engine::run()::<lambda(boost::coroutines2::coroutine<last_tick>::pull_type&)>&&)::<lambda(boost::context::fiber&&)>
> > /usr/include/boost/context/fiber_fcontext.hpp:80
    #11 0x7f2e0740118e in make_fcontext
(/lib64/libboost_context.so.1.78.0+0x118e)

0x60600000ea58 is located 0 bytes to the right of 56-byte region
[0x60600000ea20,0x60600000ea58)
freed by thread T0 here:
    #0 0x7f2e074b8dc7 in operator delete(void*, unsigned long)
(/lib64/libasan.so.6+0xb3dc7)

previously allocated by thread T0 here:
    #0 0x7f2e074b7f47 in operator new(unsigned long)
(/lib64/libasan.so.6+0xb2f47)

SUMMARY: AddressSanitizer: heap-use-after-free
/usr/include/boost/multiprecision/cpp_dec_float.hpp:210 in
boost::multiprecision::backends::cpp_dec_float<50u, int,
void>::cpp_dec_float(boost::multiprecision::backends::cpp_dec_float<50u,
int, void> const&)
Shadow bytes around the buggy address:
  0x0c0c7fff9cf0: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
  0x0c0c7fff9d00: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
  0x0c0c7fff9d10: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa
  0x0c0c7fff9d20: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
  0x0c0c7fff9d30: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
=>0x0c0c7fff9d40: fa fa fa fa fd fd fd fd fd[fd]fd fa fa fa fa fa
  0x0c0c7fff9d50: 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c7fff9d90: fa fa fa fa fa fa fa fa 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
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  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
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==15679==ABORTING

On Fri, Feb 11, 2022 at 2:06 AM John Maddock via Boost-users <
[email protected]> wrote:

> On 10/02/2022 22:07, tjisana (泰志) via Boost-users wrote:
> > Okay, rebuild the binary with AddressSanitizer. Since I need to run
> > the program during market hours, I'll do so first thing tomorrow -
> > will let you know how it goes.
>
> Given that the fault is intermittent, and the offending line in the
> backtrace is innocuous, I would hazard a guess at stack overflow.
>
> BTW, just to say, cpp_dec_float does not do correct bankers rounding,
> and so may not be a good choice for critical financial programs.
>
> Best, John.
>
>
> --
> This email has been checked for viruses by Avast antivirus software.
> https://www.avast.com/antivirus
>
> _______________________________________________
> Boost-users mailing list
> [email protected]
> https://lists.boost.org/mailman/listinfo.cgi/boost-users
>

_______________________________________________
Boost-users mailing list
[email protected]
https://lists.boost.org/mailman/listinfo.cgi/boost-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.