Skip to content

Segmentation violation in Boost ASIO #3084

@waTeim

Description

@waTeim

Please provide the following information

libtorrent version (or branch):

libtorrent 1.1.4
boost 1.64

platform/architecture:

lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 9.4 (stretch)
Release:	9.4
Codename:	stretch

compiler and compiler version:

gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i586 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.9.2 (Debian 4.9.2-10) 

please describe what symptom you see, what you would expect to see instead and
how to reproduce it.

This is possibly out of the scope of libtorrent, but specific guards might be included to avoid it, or some warning how it may occur.

This seems likely to the known boost asio problem 7611

Here's the stack trace.

(gdb) where
#0  0x000000000078f284 in boost::asio::detail::epoll_reactor::start_op (allow_speculative=<optimized out>, is_continuation=false, op=0x7f6358117760, descriptor_data=@0x7f635812b7d0: 0x0, descriptor=<optimized out>, op_type=1, this=0x19de170)
at /usr/local/include/boost/asio/detail/impl/epoll_reactor.ipp:230
#1  boost::asio::detail::reactive_socket_service_base::start_op (this=<optimized out>, impl=..., op_type=1, op=0x7f6358117760, is_continuation=<optimized out>, is_non_blocking=<optimized out>, noop=false)
at /usr/local/include/boost/asio/detail/impl/reactive_socket_service_base.ipp:214
#2  0x000000000079fe76 in boost::asio::detail::reactive_socket_service_base::async_send<std::vector<boost::asio::const_buffer>, libtorrent::aux::allocating_handler<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::peer_connection, boost::system::error_code const&, unsigned long>, boost::_bi::list3<boost::_bi::value<boost::shared_ptr<libtorrent::peer_connection> >, boost::arg<1>, boost::arg<2> > >, 336ul> > (handler=..., flags=0, buffers=std::vector of length 1, capacity 8 = {...}, impl=..., this=0x19de298)
at /usr/local/include/boost/asio/detail/reactive_socket_service_base.hpp:216
#3  boost::asio::stream_socket_service<boost::asio::ip::tcp>::async_send<std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, libtorrent::aux::allocating_handler<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::peer_connection, boost::system::error_code const&, unsigned long>, boost::_bi::list3<boost::_bi::value<boost::shared_ptr<libtorrent::peer_connection> >, boost::arg<1>, boost::arg<2> > >, 336ul> > (this=0x19de270, impl=..., buffers=std::vector of length 1, capacity 8 = {...},
flags=0, handler=...) at /usr/local/include/boost/asio/stream_socket_service.hpp:334
#4  0x00000000007b99d5 in boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::async_write_some<std::vector<boost::asio::const_buffer>, libtorrent::aux::allocating_handler<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::peer_connection, boost::system::error_code const&, unsigned long>, boost::_bi::list3<boost::_bi::value<boost::shared_ptr<libtorrent::peer_connection> >, boost::arg<1>, boost::arg<2> > >, 336ul> > (handler=..., buffers=...,
this=<optimized out>) at /usr/local/include/boost/asio/basic_stream_socket.hpp:732
#5  libtorrent::proxy_base::async_write_some<std::vector<boost::asio::const_buffer>, libtorrent::aux::allocating_handler<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::peer_connection, boost::system::error_code const&, unsigned long>, boost::_bi::list3<boost::_bi::value<boost::shared_ptr<libtorrent::peer_connection> >, boost::arg<1>, boost::arg<2> > >, 336ul> > (handler=..., buffers=..., this=<optimized out>) at ../include/libtorrent/proxy_base.hpp:122
#6  libtorrent::socket_type::async_write_some<std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, libtorrent::aux::allocating_handler<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::peer_connection, boost::system::error_code const&, unsigned long>, boost::_bi::list3<boost::_bi::value<boost::shared_ptr<libtorrent::peer_connection> >, boost::arg<1>, boost::arg<2> > >, 336ul> > (this=0x7f63580084c8, buffers=<error reading variable: Cannot access memory at address 0x88>, handler=...)
at ../include/libtorrent/socket_type.hpp:240
#7  0x0000000000787e82 in libtorrent::network_thread_pool::process_job (this=<optimized out>, j=..., post=<optimized out>) at session_impl.cpp:199
#8  0x000000000078d6cf in libtorrent::thread_pool<libtorrent::socket_job>::thread_fun (this=0x7f63580029d0, thread_id=0) at ../include/libtorrent/thread_pool.hpp:133
#9  0x00000000007295ff in boost::asio::detail::boost_asio_detail_posix_thread_function (arg=0x7f6358002d10) at /usr/local/include/boost/asio/detail/impl/posix_thread.ipp:64
#10 0x00007f636b594494 in start_thread (arg=0x7f635da72700) at pthread_create.c:333
#11 0x00007f636aa39acf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
(gdb) down
Bottom (innermost) frame selected; you cannot go down.
(gdb) print descriptor_data
$1 = (boost::asio::detail::epoll_reactor::per_descriptor_data &) @0x7f635812b7d0: 0x0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions