- **status**: assigned --> fixed
- **Comment**:
commit bfced2a4c511c327f6c97a0d6a057d956ebfdccd (HEAD -> develop,
origin/develop)
Author: tai.h.nguyen <[email protected]>
Date: Fri Mar 21 13:07:40 2025 +0700
smf: Fix osafsmfd coredump [#3367]
The node 'inv_id' will be removed in the main thread when the callbacks
are executed successfully. It will then continue to be checked and removed
in the procedure thread if it has not been removed yet. A core dump may
occur
if procedures executing in parallel access an invalid pointer to 'inv_id'
after it has already been removed by the main thread.
To avoid this, smfd must avoid removing the node in the sender thread until
the callback has successfully completed and the node has been deleted from
the main thread. The sender thread is only removed when transmitting fails.
---
**[tickets:#3367] smf: fix issue when remove node inv_id between threads**
**Status:** fixed
**Milestone:** 5.24.09
**Created:** Wed Mar 19, 2025 04:08 AM UTC by Nguyen Huynh Tai
**Last Updated:** Wed Mar 19, 2025 04:08 AM UTC
**Owner:** Nguyen Huynh Tai
The core dump was raised when executing procedures in parallel and invoking the
callback
~~~
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/local/lib/opensaf/osafsmfd --tracemask=0xffffffff'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 SmfCallback::send_callback_msg (this=0x7f240400acf0, phase=<optimized out>,
step_dn=...) at src/smf/smfd/SmfCallback.cc:331
[Current thread is 1 (Thread 0x7f242056ab00 (LWP 1217))]
Thread 1 (Thread 0x7f242056ab00 (LWP 1217)):
#0 SmfCallback::send_callback_msg (this=0x7f240400acf0, phase=<optimized out>,
step_dn=...) at src/smf/smfd/SmfCallback.cc:331
dn =
"safSmfStep=0001,safSmfProc=RollingSUfromNoExistingSG_ParallellExecution2,safSmfCampaign=rollingNodes,safApp=safSmfService"
cbk_mbx = 0x7f241400c7bc
smfsv_evt = {next = 0x0, type = SMFSV_EVT_TYPE_SMFND, cb_hdl = 0,
mds_ctxt = {length = 0 '\000', data = '\000' <repeats 11 times>}, fr_dest = 15,
fr_svc = 30, fr_node_id = 0, rcvd_prio = 0, info = {smfd = {type =
SMFD_EVT_CBK_RSP, event = {mds_info = {change = NCSMDS_NONE, dest = 1, svc_id =
0, node_id = 1634926713, rem_svc_pvt_ver = 102 'f', role = 1885697107}, cmd_rsp
= {result = 0}, cbk_rsp = {evt_type = SMF_CLBK_EVT, evt = {cbk_evt = {inv_id =
1, scope_id = 0, object_name = {_opaque = {121, 24947, 21350, 26221, 29779,
28773, 12349, 12336, 11313, 24947, 21350, 26221, 29264, 25455, 21053, 27759,
26988, 26478, 21843, 29286, 28015, 28494, 30789, 29545, 26996, 26478, 18259,
20575, 29281, 27745, 25964, 27756, 30789, 25445, 29813, 28521, 12910, 29484,
26209, 27987, 17254, 28001, 24944, 26473, 15726, 28530, 27756, 28265, 20071,
25711, 29541, 29484, 26209, 28737, 15728, 24947, 21350, 26221, 25939, 30322,
25449, 101, 0 <repeats 67 times>}}, camp_phase = SA_SMF_UPGRADE, cbk_label =
{labelSize = 25, label = 0x7f23fc0052f0 "OsafSmfCbkUtil-UpgradeCmd"},
params_len = 31, params = 0x7f23fc002dd0 "logger NTAI-firstStepBeforeLock"},
resp_evt = {inv_id = 1, err = 0}}, next = 0x0}}}, smfnd = {type =
SMFND_EVT_CBK_RSP, event = {mds_info = {change = NCSMDS_NONE, dest = 1, svc_id
= 0, node_id = 1634926713, rem_svc_pvt_ver = 102 'f', role = 1885697107},
cmd_req = {cmd_len = 0, cmd = 0x1 <error: Cannot access memory at address
0x1>}, cbk_req_rsp = {evt_type = SMF_CLBK_EVT, evt = {cbk_evt = {inv_id = 1,
scope_id = 0, object_name = {_opaque = {121, 24947, 21350, 26221, 29779, 28773,
12349, 12336, 11313, 24947, 21350, 26221, 29264, 25455, 21053, 27759, 26988,
26478, 21843, 29286, 28015, 28494, 30789, 29545, 26996, 26478, 18259, 20575,
29281, 27745, 25964, 27756, 30789, 25445, 29813, 28521, 12910, 29484, 26209,
27987, 17254, 28001, 24944, 26473, 15726, 28530, 27756, 28265, 20071, 25711,
29541, 29484, 26209, 28737, 15728, 24947, 21350, 26221, 25939, 30322, 25449,
101, 0 <repeats 67 times>}}, camp_phase = SA_SMF_UPGRADE, cbk_label =
{labelSize = 25, label = 0x7f23fc0052f0 "OsafSmfCbkUtil-UpgradeCmd"},
params_len = 31, params = 0x7f23fc002dd0 "logger NTAI-firstStepBeforeLock"},
resp_evt = {inv_id = 1, err = 0}}, next = 0x0}, cmd_req_asynch = {timeout = 0,
cmd_len = 0, cmd = 0x1 <error: Cannot access memory at address 0x1>}}}, smfa =
{type = SMFA_EVT_CBK, event = {mds_info = {change = NCSMDS_NONE, dest = 1,
svc_id = 0, node_id = 1634926713, rem_svc_pvt_ver = 102 'f', role =
1885697107}, cbk_req_rsp = {evt_type = SMF_CLBK_EVT, evt = {cbk_evt = {inv_id =
1, scope_id = 0, object_name = {_opaque = {121, 24947, 21350, 26221, 29779,
28773, 12349, 12336, 11313, 24947, 21350, 26221, 29264, 25455, 21053, 27759,
26988, 26478, 21843, 29286, 28015, 28494, 30789, 29545, 26996, 26478, 18259,
20575, 29281, 27745, 25964, 27756, 30789, 25445, 29813, 28521, 12910, 29484,
26209, 27987, 17254, 28001, 24944, 26473, 15726, 28530, 27756, 28265, 20071,
25711, 29541, 29484, 26209, 28737, 15728, 24947, 21350, 26221, 25939, 30322,
25449, 101, 0 <repeats 67 times>}}, camp_phase = SA_SMF_UPGRADE, cbk_label =
{labelSize = 25, label = 0x7f23fc0052f0 "OsafSmfCbkUtil-UpgradeCmd"},
params_len = 31, params = 0x7f23fc002dd0 "logger NTAI-firstStepBeforeLock"},
resp_evt = {inv_id = 1, err = 0}}, next = 0x0}}}}}
evt = <optimized out>
mds_info = {i_mds_hdl = 65551, i_svc_id = 30, i_op = MDS_SEND, info =
{svc_install = {i_yr_svc_hdl = 139793138097216, i_install_scope = 31, i_svc_cb
= 0xa, o_dest = 4, o_anc = 0, i_mds_q_ownership = false, o_sel_obj = {raise_obj
= 0, rmv_obj = 0}, i_mds_svc_pvt_ver = 0 '\000', i_fail_no_active_sends =
false, i_msg_loss_indication = false}, svc_uninstall = {i_msg_free_cb =
0x7f2420569c40}, svc_subscribe = {i_scope = 542547008, i_num_svcs = 36 '$',
i_svc_ids = 0x20000001f}, red_subscribe = {i_scope = 542547008, i_num_svcs = 36
'$', i_svc_ids = 0x20000001f}, svc_cancel = {i_num_svcs = 64 '@', i_svc_ids =
0x20000001f}, svc_sys_subscribe = {i_evt_map = 542547008}, svc_send = {i_msg =
0x7f2420569c40, i_to_svc = 31, i_priority = MDS_SEND_PRIORITY_MEDIUM,
i_sendtype = MDS_SENDTYPE_BCAST, info = {snd = {i_to_dest = 4}, sndrsp =
{i_to_dest = 4, i_time_to_wait = 0, o_rsp = 0x0, buff = 0x0, len = 0,
o_msg_fmt_ver = 0}, sndrack = {i_sender_dest = 4, i_time_to_wait = 0,
i_msg_ctxt = {length = 0 '\000', data = '\000' <repeats 11 times>}}, sndack =
{i_to_dest = 4, i_time_to_wait = 0}, rsp = {i_sender_dest = 4, i_msg_ctxt =
{length = 0 '\000', data = '\000' <repeats 11 times>}}, red = {i_to_vdest = 4,
i_to_anc = 0}, redrsp = {i_to_vdest = 4, i_to_anc = 0, i_time_to_wait = 0,
o_rsp = 0x0, buff = 0x0, len = 0, o_msg_fmt_ver = 0}, redrack = {i_to_vdest =
4, i_to_anc = 0, i_time_to_wait = 0, i_msg_ctxt = {length = 0 '\000', data =
'\000' <repeats 11 times>}}, redack = {i_to_vdest = 4, i_to_anc = 0,
i_time_to_wait = 0}, rrsp = {i_to_dest = 4, i_to_anc = 0, i_msg_ctxt = {length
= 0 '\000', data = '\000' <repeats 11 times>}}, bcast = {i_bcast_scope =
NCSMDS_SCOPE_NONE}, rbcast = {i_bcast_scope = NCSMDS_SCOPE_NONE}}},
svc_direct_send = {i_direct_buff = 0x7f2420569c40 "", i_direct_buff_len = 31,
i_to_svc = 2, i_priority = 10, i_sendtype = MDS_SENDTYPE_SND, i_msg_fmt_ver =
4, info = {snd = {i_to_dest = 0}, sndrsp = {i_to_dest = 0, i_time_to_wait = 0,
o_rsp = 0x0, buff = 0x0, len = 0, o_msg_fmt_ver = 0}, sndrack = {i_sender_dest
= 0, i_time_to_wait = 0, i_msg_ctxt = {length = 0 '\000', data = '\000'
<repeats 11 times>}}, sndack = {i_to_dest = 0, i_time_to_wait = 0}, rsp =
{i_sender_dest = 0, i_msg_ctxt = {length = 0 '\000', data = '\000' <repeats 11
times>}}, red = {i_to_vdest = 0, i_to_anc = 0}, redrsp = {i_to_vdest = 0,
i_to_anc = 0, i_time_to_wait = 0, o_rsp = 0x0, buff = 0x0, len = 0,
o_msg_fmt_ver = 0}, redrack = {i_to_vdest = 0, i_to_anc = 0, i_time_to_wait =
0, i_msg_ctxt = {length = 0 '\000', data = '\000' <repeats 11 times>}}, redack
= {i_to_vdest = 0, i_to_anc = 0, i_time_to_wait = 0}, rrsp = {i_to_dest = 0,
i_to_anc = 0, i_msg_ctxt = {length = 0 '\000', data = '\000' <repeats 11
times>}}, bcast = {i_bcast_scope = 0}, rbcast = {i_bcast_scope = 0}}},
retrieve_msg = {i_dispatchFlags = 542547008}, chg_role = {new_role =
542547008}, query_dest = {i_dest = 139793138097216, i_svc_id = 31,
i_query_for_role = 2, info = {query_for_anc = {i_vdest_rl = 10, o_anc = 4},
query_for_role = {i_anc = 10, o_vdest_rl = 4}}, o_local = false, o_node_id = 0,
o_adest = 0}, query_pwe = {o_pwe_id = 40000, o_absolute = 86, info = {abs_info
= {o_adest = 8589934623}, virt_info = {o_vdest = 8589934623, o_anc = 10, o_role
= 4}}}, subscribe_node = {i_dummy = 542547008}, unsubscribe_node = {i_dummy =
542547008}}}
fds = {{fd = 53, events = 1, revents = 1}}
temp = 0x7f240800a210
new_inv_id = 0x7f23fc00f190
rsp_evt = <optimized out>
rc = <optimized out>
ais_err = SA_AIS_OK
inv_id_sent = 1
t_ = {trace_leave_called = false, file_ = 0x55ec3be7fb8c
"src/smf/smfd/SmfCallback.cc", function_ = 0x55ec3be7fba8 "send_callback_msg"}
__FUNCTION__ = "send_callback_msg"
mbx_fd = <optimized out>
#1 0x000055ec3bde36a4 in SmfCallback::execute (this=this@entry=0x7f240400acf0,
step_dn="safSmfStep=0001,safSmfProc=RollingSUfromNoExistingSG_ParallellExecution2,safSmfCampaign=rollingNodes,safApp=safSmfService")
at src/smf/smfd/SmfCallback.cc:78
t_ = {trace_leave_called = false, file_ = 0x55ec3be7fb8c
"src/smf/smfd/SmfCallback.cc", function_ = 0x55ec3be7fc51 "execute"}
__FUNCTION__ = "execute"
rc = <optimized out>
#2 0x000055ec3be6494b in SmfUpgradeStep::checkAndInvokeCallback
(this=<optimized out>, callbackList=std::__cxx11::list = {...},
camp_phase=camp_phase@entry=1) at src/smf/smfd/SmfUpgradeStep.cc:2513
stepCount = <optimized out>
cbkElem = @0x7f2414017aa0: 0x7f240400acf0
__for_range = std::__cxx11::list = {[0] = 0x7f240400acf0}
__for_begin = <optimized out>
__for_end = <optimized out>
stepDn =
"safSmfStep=0001,safSmfProc=RollingSUfromNoExistingSG_ParallellExecution2,safSmfCampaign=rollingNodes,safApp=safSmfService"
rc = <optimized out>
iter = <optimized out>
t_ = {trace_leave_called = false, file_ = 0x55ec3be94948
"src/smf/smfd/SmfUpgradeStep.cc", function_ = 0x55ec3be9645e
"checkAndInvokeCallback"}
__FUNCTION__ = "checkAndInvokeCallback"
procSteps = std::vector of length 5, capacity 8 = {0x7f23fc0039c0,
0x7f23fc00d020, 0x7f23fc00d560, 0x7f23fc00d730, 0x7f23fc00da40}
#3 0x000055ec3be2f373 in SmfStepTypeAuLock::execute (this=0x7f241400cab0) at
src/smf/smfd/SmfStepTypes.cc:323
cbkList = std::__cxx11::list = {[0] = 0x7f240400acf0}
t_ = {trace_leave_called = false, file_ = 0x55ec3be8d580
"src/smf/smfd/SmfStepTypes.cc", function_ = 0x55ec3be7fc51 "execute"}
__FUNCTION__ = "execute"
#4 0x000055ec3be2d238 in SmfStepStateExecuting::execute (this=0x7f23fc004d70,
i_step=0x7f23fc0039c0) at src/smf/smfd/SmfStepState.cc:221
t_ = {trace_leave_called = false, file_ = 0x55ec3be8ce0e
"src/smf/smfd/SmfStepState.cc", function_ = 0x55ec3be7fc51 "execute"}
__FUNCTION__ = "execute"
stepType = <optimized out>
#5 0x000055ec3be63eff in SmfUpgradeStep::execute (this=0x7f23fc0039c0) at
src/smf/smfd/SmfUpgradeStep.cc:2440
stepResult = <optimized out>
t_ = {trace_leave_called = false, file_ = 0x55ec3be94948
"src/smf/smfd/SmfUpgradeStep.cc", function_ = 0x55ec3be7fc51 "execute"}
__FUNCTION__ = "execute"
#6 0x000055ec3be24db6 in SmfProcStateExecuting::executeStep
(this=0x7f2408002c50, i_proc=0x7f240400b120) at src/smf/smfd/SmfProcState.cc:357
stepResult = <optimized out>
elem = @0x7f23fc002c00: 0x7f23fc0039c0
__for_range = std::vector of length 5, capacity 8 = {0x7f23fc0039c0,
0x7f23fc00d020, 0x7f23fc00d560, 0x7f23fc00d730, 0x7f23fc00da40}
__for_begin = <optimized out>
__for_end = <optimized out>
t_ = {trace_leave_called = false, file_ = 0x55ec3be8baf5
"src/smf/smfd/SmfProcState.cc", function_ = 0x55ec3be8bb12 "executeStep"}
__FUNCTION__ = "executeStep"
procSteps = std::vector of length 5, capacity 8 = {0x7f23fc0039c0,
0x7f23fc00d020, 0x7f23fc00d560, 0x7f23fc00d730, 0x7f23fc00da40}
#7 0x000055ec3be47844 in SmfUpgradeProcedure::execute (this=0x7f240400b120) at
src/smf/smfd/SmfUpgradeProcedure.cc:4378
t_ = {trace_leave_called = false, file_ = 0x55ec3be90de0
"src/smf/smfd/SmfUpgradeProcedure.cc", function_ = 0x55ec3be7fc51 "execute"}
__FUNCTION__ = "execute"
procResult = <optimized out>
#8 0x000055ec3be278d4 in SmfProcedureThread::processEvt (this=0x7f241400c7b0)
at src/smf/smfd/SmfProcedureThread.cc:617
evt = 0x7f2414005240
procResult = SMF_PROC_DONE
#9 0x000055ec3be27a98 in SmfProcedureThread::handleEvents
(this=this@entry=0x7f241400c7b0) at src/smf/smfd/SmfProcedureThread.cc:697
ret = <optimized out>
mbx_fd = <optimized out>
fds = {{fd = 51, events = 1, revents = 1}}
#10 0x000055ec3bdd4e42 in SmfProcedureThread::main (this=0x7f241400c7b0) at
src/smf/smfd/SmfProcedureThread.cc:717
t_ = {trace_leave_called = false, file_ = 0x55ec3be8bd80
"src/smf/smfd/SmfProcedureThread.cc", function_ = 0x55ec3be8374c "main"}
__FUNCTION__ = "main"
#11 0x000055ec3bdd4efd in SmfProcedureThread::main (info=0x7f241400c7b0) at
src/smf/smfd/SmfProcedureThread.cc:57
self = 0x7f241400c7b0
#12 0x00007f2422ee9609 in start_thread (arg=<optimized out>) at
pthread_create.c:477
ret = <optimized out>
pd = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {139793138100992,
-5628119038026148695, 139793138366654, 139793138366655, 139793138366816,
139793138099008, 5741147383385199785, 5741142093694538921}, mask_was_saved =
0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0,
canceltype = 0}}}
not_first_call = 0
#13 0x00007f2422e0e353 in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:95
~~~
---
Sent from sourceforge.net because [email protected] is
subscribed to https://sourceforge.net/p/opensaf/tickets/
To unsubscribe from further messages, a project admin can change settings at
https://sourceforge.net/p/opensaf/admin/tickets/options. Or, if this is a
mailing list, you can unsubscribe from the mailing list._______________________________________________
Opensaf-tickets mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-tickets