Source: icinga2
Version: 2.13.6-2
Severity: grave
Justification: renders package unusable
X-Debbugs-Cc: d...@debian.org
Control: fixed -1 icinga2/2.14.2-1

Dear maintainer,

DSA has issues running icinga2 on ppc64el on Bookworm, it fails with a
segmentation fault just after startup:

| × icinga2.service - Icinga host/service/network monitoring system
|      Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; preset: 
enabled)
|      Active: failed (Result: exit-code) since Thu 2024-04-04 20:55:13 UTC; 
3min 57s ago
|    Duration: 1.209s
|        Docs: https://icinga.com/docs/icinga2/latest/
|     Process: 356368 ExecStartPre=/usr/lib/icinga2/prepare-dirs 
/usr/lib/icinga2/icinga2 (code=exited, status=0/SUCCESS)
|     Process: 356373 ExecStart=/usr/sbin/icinga2 daemon --close-stdio -e 
${ICINGA2_ERROR_LOG} (code=exited, status=139)
|    Main PID: 356373 (code=exited, status=139)
|      Status: "Startup finished."
|         CPU: 473ms
| 
| Apr 04 20:55:12 platti icinga2[356415]: [2024-04-04 20:55:12 +0000] 
information/ConfigItem: Instantiated 1 IcingaApplication.
| Apr 04 20:55:12 platti icinga2[356415]: [2024-04-04 20:55:12 +0000] 
information/ConfigItem: Instantiated 2 Endpoints.
| Apr 04 20:55:12 platti icinga2[356415]: [2024-04-04 20:55:12 +0000] 
information/ConfigItem: Instantiated 1 FileLogger.
| Apr 04 20:55:12 platti icinga2[356415]: [2024-04-04 20:55:12 +0000] 
information/ConfigItem: Instantiated 249 CheckCommands.
| Apr 04 20:55:12 platti icinga2[356415]: [2024-04-04 20:55:12 +0000] 
information/ConfigItem: Instantiated 1 ApiListener.
| Apr 04 20:55:12 platti icinga2[356415]: [2024-04-04 20:55:12 +0000] 
information/ScriptGlobal: Dumping variables to file 
'/var/cache/icinga2/icinga2.vars'
| Apr 04 20:55:12 platti systemd[1]: Started icinga2.service - Icinga 
host/service/network monitoring system.
| Apr 04 20:55:12 platti icinga2[356373]: [2024-04-04 20:55:12 +0000] 
information/cli: Closing console log.
| Apr 04 20:55:13 platti systemd[1]: icinga2.service: Main process exited, 
code=exited, status=139/n/a
| Apr 04 20:55:13 platti systemd[1]: icinga2.service: Failed with result 
'exit-code'.

I have been able to obtain a backtrace:

| (gdb) bt full
| #0  0x0000000127d44850 in icinga::JsonRpcConnection::CheckLiveness 
(this=this@entry=0x0, yc=...) at ./lib/remote/jsonrpcconnection.cpp:344
|         ec = {val_ = 0, failed_ = false, cat_ = 0x0}
| #1  0x0000000127d44f04 in operator() (__closure=0x7fff7c002620, yc=...) at 
./lib/remote/jsonrpcconnection.cpp:58
|         keepAlive = {px = 0x0}
|         this = 0x0
|         keepAlive = <optimized out>
|         this = <optimized out>
| #2  operator() (__closure=__closure@entry=0x7fff7c002620, yc=...) at 
./lib/base/io-engine.hpp:106
|         f = {__this = 0x0, __keepAlive = {px = 0x0}}
| #3  0x0000000127d521bc in 
boost::asio::detail::coro_entry_point<boost::asio::executor_binder<void (*)(), 
boost::asio::io_context::strand>, 
icinga::IoEngine::SpawnCoroutine<boost::asio::io_context::strand, 
icinga::JsonRpcConnection::Start()::<lambda(boost::asio::yield_context)> 
>(boost::asio::io_context::strand&, 
icinga::JsonRpcConnection::Start()::<lambda(boost::asio::yield_context)>)::<lambda(boost::asio::yield_context)>
 >::operator() (
|     ca=..., this=<optimized out>) at 
/usr/include/boost/asio/impl/spawn.hpp:355
|         data = <optimized out>
|         yield = {coro_ = 
std::weak_ptr<boost::coroutines::push_coroutine<void>> (use count 1, weak count 
5) = {get() = 0x7fff7c0c3640}, ca_ = @0x7fff7c103488,
|           handler_ = {<boost::asio::detail::executor_binder_result_type<void 
(*)(), void>> = {<No data fields>}, 
<boost::asio::detail::executor_binder_argument_type<void (*)(), void>> = {<No 
data fields>}, <boost::asio::detail::executor_binder_argument_types<void (*)(), 
void>> = {<No data fields>}, <boost::asio::detail::executor_binder_base<void 
(*)(), boost::asio::io_context::strand, false>> = {executor_ = {service_ = 
@0x7fff94003150,
|                 impl_ = 0x7fff7c002040}, target_ = 0x127d70760 
<boost::asio::detail::default_spawn_handler()>}, <No data fields>}, ec_ = 0x0}
|         data = <optimized out>
|         yield = <optimized out>
| #4  
boost::coroutines::detail::push_coroutine_object<boost::coroutines::pull_coroutine<void>,
 void, boost::asio::detail::coro_entry_point<boost::asio::executor_binder<void 
(*)(), boost::asio::io_context::strand>, 
icinga::IoEngine::SpawnCoroutine<boost::asio::io_context::strand, 
icinga::JsonRpcConnection::Start()::<lambda(boost::asio::yield_context)> 
>(boost::asio::io_context::strand&, 
icinga::JsonRpcConnection::Start()::<lambda(boost::asio::yield_context)>)::<lambda(boost::asio::yield_context)>
 >&, 
boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>
 >::run (this=0x7fff7c1035c0)
|     at /usr/include/boost/coroutine/detail/push_coroutine_object.hpp:302
|         b = {<boost::coroutines::detail::pull_coroutine_impl<void>> = 
{<boost::noncopyable_::noncopyable> = {<boost::noncopyable_::base_token> = {<No 
data fields>}, <No data fields>},
|             _vptr.pull_coroutine_impl = 0x12884b938 <vtable for 
boost::coroutines::detail::pull_coroutine_synthesized<void>+16>, flags_ = 0, 
except_ = {ptr_ = {px = 0x0, pn = {pi_ = 0x0}}}, caller_ = 0x7fff7c103618,
|             callee_ = 0x7fff7c1035f0}, <No data fields>}
|         push_coro = {impl_ = 0x7fff7c103490}
|         to = {do_unwind = 64, coro = 0x7fff7c103670}
|         __PRETTY_FUNCTION__ = <optimized out>
|         b = <optimized out>
|         push_coro = <optimized out>
|         to = <optimized out>
| #5  
boost::coroutines::detail::trampoline_push_void<boost::coroutines::detail::push_coroutine_object<boost::coroutines::pull_coroutine<void>,
 void, boost::asio::detail::coro_entry_point<boost::asio::executor_binder<void 
(*)(), boost::asio::io_context::strand>, 
icinga::IoEngine::SpawnCoroutine<boost::asio::io_context::strand, 
icinga::JsonRpcConnection::Start()::<lambda(boost::asio::yield_context)> 
>(boost::asio::io_context::strand&, 
icinga::JsonRpcConnection::Start()::<lambda(boost::asio::yield_context)>)::<lambda(boost::asio::yield_context)>
 >&, 
boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>
 > >(boost::context::detail::transfer_t) (t=...) at 
/usr/include/boost/coroutine/detail/trampoline_push.hpp:70
|         __PRETTY_FUNCTION__ = "void 
boost::coroutines::detail::trampoline_push_void(boost::context::detail::transfer_t)
 [with Coro = push_coroutine_object<boost::coroutines::pull_coroutine<void>, 
void, boost::asio::detail::coro_ent"...
|         data = <optimized out>
|         param = <optimized out>
|         coro = 0x7fff7c1035c0
| #6  0x00007fffa9670f0c in make_fcontext () from 
/lib/powerpc64le-linux-gnu/libboost_context.so.1.74.0
| No symbol table info available.

It is not exactly clear what is the issue, but it also happens when
building the version from Trixie or Bullseye on Bookworm, so it looks
like a compiler issue. This is confirmed by rebuilding the package with
-O0 or -O1, which makes the bug disappear.

I have verified that the version in Trixie is not affected, probably
because it uses a newer compiler and/or a newer boost version. I am
therefore marking the bug as fixed on this version.

For Bookworm given we can not fix the compiler easily, I propose to just
build icinga2 with -O1 on ppc64el. If you are fine with that option, I
can take care of proposing a patch and submitting it to the stable
release team.

Regards
Aurelien

Reply via email to