<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/26462">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">llme_free: clean up related sndcp<br><br>Fix crash in vty_dump_sne when sndcp->lle has already been deallocated.<br><br>Context:<br>* sndcp->lle is set only once in gprs_sndcp_entity_alloc()<br>* sndcp->lle is a struct gprs_llc_lle, which gets allocated and<br> deallocated together with struct gprs_llc_llme. From gprs_llc.h:<br><br> struct gprs_llc_llme {<br> ...<br> struct gprs_llc_lle lle[NUM_SAPIS];<br><br>Fixes: OS#4824<br>Change-Id: I707029f78222bc6335837241e5a08c54c5ae6eb3<br>---<br>M include/osmocom/sgsn/gprs_sndcp.h<br>M src/sgsn/gprs_llc.c<br>M src/sgsn/gprs_sndcp.c<br>3 files changed, 18 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/62/26462/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sgsn/gprs_sndcp.h b/include/osmocom/sgsn/gprs_sndcp.h</span><br><span>index d970240..5334d92 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_sndcp.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_sndcp.h</span><br><span>@@ -76,4 +76,7 @@</span><br><span> struct gprs_llc_xid_field *xid_field_request,</span><br><span> struct gprs_llc_lle *lle);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Clean up all gprs_sndcp_entities related to llme (OS#4824) */</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_sndcp_sm_deactivate_ind_by_llme(struct gprs_llc_llme *llme);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif /* INT_SNDCP_H */</span><br><span>diff --git a/src/sgsn/gprs_llc.c b/src/sgsn/gprs_llc.c</span><br><span>index eea1cec..453ded5 100644</span><br><span>--- a/src/sgsn/gprs_llc.c</span><br><span>+++ b/src/sgsn/gprs_llc.c</span><br><span>@@ -590,6 +590,7 @@</span><br><span> </span><br><span> static void llme_free(struct gprs_llc_llme *llme)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ gprs_sndcp_sm_deactivate_ind_by_llme(llme);</span><br><span> gprs_sndcp_comp_free(llme->comp.proto);</span><br><span> gprs_sndcp_comp_free(llme->comp.data);</span><br><span> llist_del(&llme->list);</span><br><span>diff --git a/src/sgsn/gprs_sndcp.c b/src/sgsn/gprs_sndcp.c</span><br><span>index 6692f1a..d8982ac 100644</span><br><span>--- a/src/sgsn/gprs_sndcp.c</span><br><span>+++ b/src/sgsn/gprs_sndcp.c</span><br><span>@@ -544,6 +544,20 @@</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Clean up all gprs_sndcp_entities related to llme (OS#4824) */</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_sndcp_sm_deactivate_ind_by_llme(struct gprs_llc_llme *llme)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gprs_sndcp_entity *sne, *sne2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ llist_for_each_entry_safe(sne, sne2, &gprs_sndcp_entities, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (sne->lle->llme == llme) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DSNDCP, LOGL_INFO, "SNSM-DEACTIVATE.ind for SNDCP attached to llme=%p\n", llme);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Free and remove from list */</span><br><span style="color: hsl(120, 100%, 40%);">+ sndcp_sm_deactivate_ind(sne->lle, sne->nsapi);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Fragmenter state */</span><br><span> struct sndcp_frag_state {</span><br><span> uint8_t frag_nr;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/26462">change 26462</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-sgsn/+/26462"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-sgsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I707029f78222bc6335837241e5a08c54c5ae6eb3 </div>
<div style="display:none"> Gerrit-Change-Number: 26462 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>