openbmc/phosphor-host-ipmid

IPMI: IPL: phosphor-ipmi-host.service SEGV core dumps during killall or stop ipmid

lxwinspur opened this issue · 1 comments

This can be recreated by stopping the ipmi service with command systemctl stop phosphor-ipmi-host or killall. It appears the ipmi app is not handling signals gracefully:

journalctl

root@fp5280g2:/lib/systemd/system# systemctl stop phosphor-ipmi-host.service
Apr 03 21:00:42 fp5280g2 ipmid[343]: Command in process, no attention
Apr 03 21:00:42 fp5280g2 ipmid[343]: Command in process, no attention
Apr 03 21:00:42 fp5280g2 systemd[1]: Stopping Phosphor MBOX Daemon...
Apr 03 21:00:42 fp5280g2 systemd[1]: mboxd.service: Deactivated successfully.
Apr 03 21:00:42 fp5280g2 systemd[1]: Stopped Phosphor MBOX Daemon.
Apr 03 21:00:42 fp5280g2 ipmid[343]: Received signal; quitting
Apr 03 21:00:42 fp5280g2 systemd[1]: Stopping Phosphor Inband IPMI...
Apr 03 21:00:43 fp5280g2 systemd[1]: Created slice Slice /system/systemd-coredump.
Apr 03 21:00:43 fp5280g2 systemd[1]: Started Process Core Dump (PID 396/UID 0).
root@fp5280g2:/lib/systemd/system# Apr 03 21:00:44 fp5280g2 systemd-coredump[397]: elfutils disabled, parsing ELF objects not supported
Apr 03 21:00:44 fp5280g2 systemd-coredump[397]: [LNK] Process 343 (ipmid) of user 0 dumped core.
Apr 03 21:00:44 fp5280g2 systemd[1]: phosphor-ipmi-host.service: Main process exited, code=dumped, status=11/SEGV
Apr 03 21:00:44 fp5280g2 systemd[1]: phosphor-ipmi-host.service: Failed with result 'core-dump'.
Apr 03 21:00:44 fp5280g2 systemd[1]: Stopped Phosphor Inband IPMI.
Apr 03 21:00:44 fp5280g2 systemd[1]: systemd-coredump@0-396-0.service: Deactivated successfully.

core dump file:
core.ipmid.tar.gz

Parsed coreDump file

Core was generated by `ipmid'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x761fe2e0 in ?? ()
(gdb) bt
#0  0x761fe2e0 in ?? ()
#1  0x004f4d9c in std::_Function_base::~_Function_base (this=<optimized out>, this=<optimized out>) at /usr/include/c++/13.1.1/bits/std_function.h:244
#2  std::function<void (std::pair<unsigned char, unsigned char>, bool)>::~function() (this=<optimized out>, this=<optimized out>)
    at /usr/include/c++/13.1.1/bits/std_function.h:334
#3  std::_Head_base<1u, std::function<void (std::pair<unsigned char, unsigned char>, bool)>, false>::~_Head_base() (this=<optimized out>, this=<optimized out>)
    at /usr/include/c++/13.1.1/tuple:188
#4  std::_Tuple_impl<1u, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >::~_Tuple_impl() (this=<optimized out>, this=<optimized out>)
    at /usr/include/c++/13.1.1/tuple:489
#5  std::_Tuple_impl<0u, std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >::~_Tuple_impl() (
    this=<optimized out>, this=<optimized out>) at /usr/include/c++/13.1.1/tuple:259
#6  std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >::~tuple() (this=<optimized out>, 
    this=<optimized out>) at /usr/include/c++/13.1.1/tuple:1232
#7  std::destroy_at<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > >(std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*) (__location=0x102422c) at /usr/include/c++/13.1.1/bits/stl_construct.h:88
#8  std::_Destroy<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > >(std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*) (__pointer=0x102422c) at /usr/include/c++/13.1.1/bits/stl_construct.h:149
#9  std::_Destroy_aux<false>::__destroy<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*>(std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*) (__last=<optimized out>, __first=0x102422c) at /usr/include/c++/13.1.1/bits/stl_construct.h:163
#10 std::_Destroy<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*>(std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*) (__last=<optimized out>, __first=<optimized out>) at /usr/include/c++/13.1.1/bits/stl_construct.h:196
#11 std::_Destroy<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > >(std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*, std::allocator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > >&) (__last=<optimized out>, 
    __first=<optimized out>) at /usr/include/c++/13.1.1/bits/alloc_traits.h:947
#12 std::deque<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::allocator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > > >::_M_destroy_data_aux(std::_Deque_iterator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >&, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*>, std::_Deque_iterator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >&, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*>) (this=<optimized out>, __last=..., __first=...) at /usr/include/c++/13.1.1/bits/deque.tcc:875
--Type <RET> for more, q to quit, c to continue without paging--
#13 std::deque<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::allocator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > > >::_M_destroy_data(std::_Deque_iterator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >&, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*>, std::_Deque_iterator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >&, std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >*>, std::allocator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > > const&) (this=0x1024184, __first=..., __last=...) at /usr/include/c++/13.1.1/bits/stl_deque.h:2091
#14 std::deque<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::allocator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > > >::~deque() [clone .isra.0] (this=<optimized out>, 
    this=<optimized out>) at /usr/include/c++/13.1.1/bits/stl_deque.h:1028
#15 0x004d5acc in std::queue<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::deque<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> >, std::allocator<std::tuple<std::pair<unsigned char, unsigned char>, std::function<void (std::pair<unsigned char, unsigned char>, bool)> > > > >::~queue() (this=<optimized out>, this=<optimized out>)
    at /usr/include/c++/13.1.1/bits/stl_queue.h:96
#16 phosphor::host::command::Manager::~Manager (this=<optimized out>, this=<optimized out>)
    at /usr/src/debug/phosphor-ipmi-host/1.0+gitAUTOINC+cbfa6e1d2b-r1/host-cmd-manager.hpp:25
#17 std::default_delete<phosphor::host::command::Manager>::operator() (this=<optimized out>, __ptr=0x1024180) at /usr/include/c++/13.1.1/bits/unique_ptr.h:99
#18 std::default_delete<phosphor::host::command::Manager>::operator() (__ptr=0x1024180, this=<optimized out>) at /usr/include/c++/13.1.1/bits/unique_ptr.h:93
#19 std::unique_ptr<phosphor::host::command::Manager, std::default_delete<phosphor::host::command::Manager> >::~unique_ptr (this=<optimized out>, this=<optimized out>)
    at /usr/include/c++/13.1.1/bits/unique_ptr.h:404
#20 0x76365700 in __run_exit_handlers (status=15, listp=0x7648a370 <__exit_funcs>, run_list_atexit=false, run_list_atexit@entry=true, run_dtors=run_dtors@entry=true)
    at exit.c:108
#21 0x7636585c in __GI_exit (status=<optimized out>) at exit.c:138
#22 0x004c4818 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/phosphor-ipmi-host/1.0+gitAUTOINC+cbfa6e1d2b-r1/ipmid-new.cpp:893