- Attachments has changed:

Diff:

~~~~

--- old
+++ new
@@ -1 +0,0 @@
-osafamfnd.4 (4.8 MB; application/octet-stream)

~~~~




---

** [tickets:#2896] amfnd: Invalid access pointer during assignment removal**

**Status:** fixed
**Milestone:** 5.18.09
**Created:** Fri Jul 13, 2018 07:23 AM UTC by Minh Hon Chau
**Last Updated:** Thu Aug 30, 2018 12:45 PM UTC
**Owner:** nobody


backtrace:
Program terminated with signal SIGSEGV, Segmentation fault.
~~~
#0  0x0000561b1a8ca5b5 in avnd_su_si_oper_done (cb=cb@entry=0x561b1aae8240 
<_avnd_cb>, su=su@entry=0x561b1acd23f0, si=0x561b1acdc8f0) at 
src/amf/amfnd/susm.cc:1197
[Current thread is 1 (Thread 0x7f1764548780 (LWP 193))]

Thread 1 (Thread 0x7f1764548780 (LWP 193)):
#0  0x0000561b1a8ca5b5 in avnd_su_si_oper_done (cb=cb@entry=0x561b1aae8240 
<_avnd_cb>, su=su@entry=0x561b1acd23f0, si=0x561b1acdc8f0) at 
src/amf/amfnd/susm.cc:1197
        tmp = 0x38313333352e321a
        curr_si = <optimized out>
        curr_csi = <optimized out>
        t_csi = 0x0
        rc = <optimized out>
        opr_done = 26
        t_ = {trace_leave_called = false, file_ = 0x561b1a8db949 
"src/amf/amfnd/susm.cc", function_ = 0x561b1a8dc450 
<avnd_su_si_oper_done(avnd_cb_tag*, avnd_su_tag*, 
avnd_su_si_rec*)::__FUNCTION__> "avnd_su_si_oper_done"}
        __FUNCTION__ = "avnd_su_si_oper_done"
#1  0x0000561b1a8c8fda in avnd_su_pres_st_chng_prc 
(final_st=SA_AMF_PRESENCE_UNINSTANTIATED, prv_st=SA_AMF_PRESENCE_TERMINATING, 
su=0x561b1acd23f0, cb=0x561b1aae8240 <_avnd_cb>) at src/amf/amfnd/susm.cc:1959
#2  avnd_su_pres_fsm_run (cb=cb@entry=0x561b1aae8240 <_avnd_cb>, 
su=0x561b1acd23f0, comp=comp@entry=0x561b1ace7120, ev=<optimized out>) at 
src/amf/amfnd/susm.cc:1611
#3  0x0000561b1a8907b2 in avnd_comp_clc_st_chng_prc (cb=cb@entry=0x561b1aae8240 
<_avnd_cb>, comp=comp@entry=0x561b1ace7120, 
prv_st=prv_st@entry=SA_AMF_PRESENCE_TERMINATING, 
final_st=final_st@entry=SA_AMF_PRESENCE_UNINSTANTIATED) at 
src/amf/amfnd/clc.cc:1501
#4  0x0000561b1a894cf3 in avnd_comp_clc_fsm_run (cb=cb@entry=0x561b1aae8240 
<_avnd_cb>, comp=comp@entry=0x561b1ace7120, 
ev=AVND_COMP_CLC_PRES_FSM_EV_TERM_SUCC) at src/amf/amfnd/clc.cc:892
#5  0x0000561b1a89563b in avnd_evt_clc_resp_evh (cb=0x561b1aae8240 <_avnd_cb>, 
evt=0x7f174c009950) at src/amf/amfnd/clc.cc:414
#6  0x0000561b1a8b327a in avnd_evt_process (evt=0x7f174c009950) at 
src/amf/amfnd/main.cc:658
#7  avnd_main_process () at src/amf/amfnd/main.cc:610
#8  0x0000561b1a886b92 in main (argc=2, argv=0x7ffeca215898) at 
src/amf/amfnd/main.cc:203
~~~

Original syslog and amfnd trace are attached.

Suspicious code:
~~~
uint32_t avnd_su_si_oper_done(AVND_CB *cb, AVND_SU *su, AVND_SU_SI_REC *si) {
...
      if (tmp != nullptr) {
        uint32_t sirank = tmp->rank;

        for (; tmp && (tmp->rank == sirank); tmp = avnd_silist_getprev(tmp)) { 
// line 1197
          uint32_t rc = avnd_su_si_remove(cb, tmp->su, tmp);
          osafassert(rc == NCSCC_RC_SUCCESS);
        }
      } else {
        LOG_NO("Removed assignments from AMF components");
...
}
~~~
Try a debug patch (as added at the end) to print the pointer @tmp. The syslog-1 
is where the segv occurs. The syslog-2 does not hit segv magically, but the 
@tmp->name is pointing to a rubbish string
The @tmp pointer is valid before calling avnd_su_si_remove(), however the 
function avnd_su_si_remove() / avnd_su_si_oper_done() are recursively called 
and object pointed by @temp is deleted after avnd_su_si_remove()

syslog-1:
2018-07-13 07:46:35.760 PL-3 osafamfnd[193]: NO 
'safSu=2,safSg=1,safApp=osaftest' Presence State TERMINATING => UNINSTANTIATED
2018-07-13 07:46:35.761 PL-3 osafamfnd[193]: NO Removed 
'safSi=2,safApp=osaftest' from 'safSu=2,safSg=1,safApp=osaftest'
2018-07-13 07:46:35.761 PL-3 osafamfnd[193]: NO before avnd_su_si_remove, 
tmp:**0x558b4b0f5a20**, su: safSu=1,safSg=1,safApp=osaftest, 
si:safSi=1,safApp=osaftest
2018-07-13 07:46:35.762 PL-3 osafamfnd[193]: NO 
'safSu=1,safSg=1,safApp=osaftest' Presence State INSTANTIATED => TERMINATING
2018-07-13 07:46:35.762 PL-3 osafamfnd[193]: NO 
'safSu=1,safSg=1,safApp=osaftest' Presence State TERMINATING => UNINSTANTIATED
2018-07-13 07:46:35.763 PL-3 osafamfnd[193]: NO Removed 
'safSi=1,safApp=osaftest' from 'safSu=1,safSg=1,safApp=osaftest'
2018-07-13 07:46:35.763 PL-3 osafamfnd[193]: NO Removed assignments from AMF 
components
2018-07-13 07:46:35.764 PL-3 osafamfnd[193]: NO Terminating all AMF components
2018-07-13 07:46:35.767 PL-3 osafamfnd[193]: NO free si_rec:**0x558b4b0f5a20**, 
su:safSu=1,safSg=1,safApp=osaftest, si:safSi=1,safApp=osaftest
2018-07-13 07:46:35.776 PL-3 2[346]: AL AMF Node Director is down, terminate 
this process
2018-07-13 07:46:35.776 PL-3 osafclmna[168]: AL AMF Node Director is down, 
terminate this process
2018-07-13 07:46:35.778 PL-3 osafimmnd[178]: AL AMF Node Director is down, 
terminate this process
2018-07-13 07:46:35.783 PL-3 systemd[1]: opensafd.service: Main process exited, 
code=dumped, status=11/SEGV
2018-07-13 07:46:35.783 PL-3 osafsmfnd[205]: AL AMF Node Director is down, 
terminate this process
2018-07-13 07:46:35.784 PL-3 osafckptnd[229]: AL AMF Node Director is down, 
terminate this process
2018-07-13 07:46:35.784 PL-3 osafamfwd[239]: Rebooting OpenSAF NodeId = 0 EE 
Name = No EE Mapped, Reason: AMF unexpectedly crashed, OwnNodeId = 131855, 
SupervisionTime = 60


syslog-2:
2018-07-13 15:37:04.456 PL-3 amfclccli[429]: DB CLEANUP request 
'safComp=1,safSu=1,safSg=1,safApp=osaftest'
2018-07-13 15:37:04.474 PL-3 amfclccli[429]: DB CLEANUP response 'kill(pid=327)'
2018-07-13 15:37:04.475 PL-3 amfclccli[429]: WA Failed to kill pid=327 with 
signal 9 - [Errno 3] No such process
2018-07-13 15:37:06.940 PL-3 osafamfnd[188]: NO 
'safSu=2,safSg=1,safApp=osaftest' Presence State TERMINATING => UNINSTANTIATED
2018-07-13 15:37:06.940 PL-3 osafamfnd[188]: NO Removed 
'safSi=2,safApp=osaftest' from 'safSu=2,safSg=1,safApp=osaftest'
2018-07-13 15:37:06.940 PL-3 osafamfnd[188]: NO before avnd_su_si_remove, 
tmp:**0x55c251477020**, su: safSu=1,safSg=1,safApp=osaftest, 
si:safSi=1,safApp=osaftest
2018-07-13 15:37:06.940 PL-3 osafamfnd[188]: NO 
'safSu=1,safSg=1,safApp=osaftest' Presence State INSTANTIATED => TERMINATING
2018-07-13 15:37:06.941 PL-3 osafamfnd[188]: NO 
'safSu=1,safSg=1,safApp=osaftest' Presence State TERMINATING => UNINSTANTIATED
2018-07-13 15:37:06.941 PL-3 osafamfnd[188]: NO Removed 
'safSi=1,safApp=osaftest' from 'safSu=1,safSg=1,safApp=osaftest'
2018-07-13 15:37:06.941 PL-3 osafamfnd[188]: NO Removed assignments from AMF 
components
2018-07-13 15:37:06.942 PL-3 osafamfnd[188]: NO Terminating all AMF components
2018-07-13 15:37:06.944 PL-3 osafamfnd[188]: NO free si_rec:**0x55c251477020**, 
su:safSu=1,safSg=1,safApp=osaftest, si:safSi=1,safApp=osaftest
2018-07-13 15:37:06.945 PL-3 osafamfnd[188]: NO after avnd_su_si_remove, 
tmp:**0x55c251477020**, **su: safSu=1,safSg=1,safApp=osaftest, si:��FQ�U**
2018-07-13 15:37:06.945 PL-3 osafamfnd[188]: NO free si_rec:0x55c2514762f0, 
su:safSu=2,safSg=1,safApp=osaftest, si:safSi=2,safApp=osaftest
2018-07-13 15:37:06.959 PL-3 osafckptnd[224]: exiting for shutdown, (sigterm 
from pid 471 uid 0)

debug patch:
~~~
diff --git a/src/amf/amfnd/sidb.cc b/src/amf/amfnd/sidb.cc
index 9f11e65..731d08d 100644
--- a/src/amf/amfnd/sidb.cc
+++ b/src/amf/amfnd/sidb.cc
@@ -795,6 +795,7 @@ uint32_t avnd_su_si_rec_del(AVND_CB *cb, const std::string 
&su_name,
           si_name.c_str());
 
   /* free the memory */
+  LOG_NO("free si_rec:%p, su:%s, si:%s", si_rec, si_rec->su->name.c_str(), 
si_rec->name.c_str());
   delete si_rec;
 
   return rc;
diff --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc
index c5f8240..d7cecd2 100644
--- a/src/amf/amfnd/susm.cc
+++ b/src/amf/amfnd/susm.cc
@@ -1194,8 +1194,11 @@ uint32_t avnd_su_si_oper_done(AVND_CB *cb, AVND_SU *su, 
AVND_SU_SI_REC *si) {
       if (tmp != nullptr) {
         uint32_t sirank = tmp->rank;
 
-        for (; tmp && (tmp->rank == sirank); tmp = avnd_silist_getprev(tmp)) {
+        for (; tmp && (tmp->rank == sirank);
+            tmp = avnd_silist_getprev(tmp)) {
+          LOG_NO("before avnd_su_si_remove, tmp:%p, su: %s, si:%s", tmp, 
tmp->su->name.c_str(), tmp->name.c_str());
           uint32_t rc = avnd_su_si_remove(cb, tmp->su, tmp);
+          LOG_NO("after avnd_su_si_remove, tmp:%p, su: %s, si:%s", tmp, 
tmp->su->name.c_str(), tmp->name.c_str());
           osafassert(rc == NCSCC_RC_SUCCESS);
         }
       } else {
~~~




---

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

Reply via email to