<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-abis/+/25742">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ipaccess: e1inp_ipa_bts_rsl_connect: Fix memleak recreating ipa_client_conn<br><br>If BTS, using this app, tried to use it in order to re-create the<br>connection, it would leak the previous strut ipa_client_conn. A similar<br>fix was already put in place recently for OML, but it was not applied<br>for RSL.<br><br>The leak was spotted by having a BTS connecting fine over OMl but then<br>failing each time to connect on RSL.<br><br>Related: OS#5248<br>Change-Id: I4ee1ae318b446490783c8b910fca10ba5f72dd5a<br>---<br>M src/input/ipaccess.c<br>1 file changed, 19 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/42/25742/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c</span><br><span>index 63461a2..04b4474 100644</span><br><span>--- a/src/input/ipaccess.c</span><br><span>+++ b/src/input/ipaccess.c</span><br><span>@@ -1005,7 +1005,7 @@</span><br><span> </span><br><span> struct ipaccess_line {</span><br><span>     bool line_already_initialized;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct ipa_client_conn *ipa_cli;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct ipa_client_conn *ipa_cli[NUM_E1_TS]; /* 0=OML, 1+N=TRX_N */</span><br><span> };</span><br><span> </span><br><span> static int ipaccess_line_update(struct e1inp_line *line)</span><br><span>@@ -1078,10 +1078,10 @@</span><br><span>                IPA_TCP_PORT_OML);</span><br><span> </span><br><span>          /* Drop previous line */</span><br><span style="color: hsl(0, 100%, 40%);">-                if (il->ipa_cli) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   ipa_client_conn_close(il->ipa_cli);</span><br><span style="color: hsl(0, 100%, 40%);">-                  ipa_client_conn_destroy(il->ipa_cli);</span><br><span style="color: hsl(0, 100%, 40%);">-                        il->ipa_cli = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+                if (il->ipa_cli[0]) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      ipa_client_conn_close(il->ipa_cli[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+                     ipa_client_conn_destroy(il->ipa_cli[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+                   il->ipa_cli[0] = NULL;</span><br><span>            }</span><br><span> </span><br><span>                link = ipa_client_conn_create2(tall_ipa_ctx,</span><br><span>@@ -1111,7 +1111,7 @@</span><br><span> </span><br><span>             e1i_ts = e1inp_line_ipa_oml_ts(line);</span><br><span>                ipaccess_bts_keepalive_fsm_alloc(e1i_ts, link, "oml_bts_to_bsc");</span><br><span style="color: hsl(0, 100%, 40%);">-             il->ipa_cli = link;</span><br><span style="color: hsl(120, 100%, 40%);">+                il->ipa_cli[0] = link;</span><br><span>            ret = 0;</span><br><span>             break;</span><br><span>       }</span><br><span>@@ -1137,6 +1137,7 @@</span><br><span> {</span><br><span>       struct ipa_client_conn *rsl_link;</span><br><span>    struct e1inp_ts *e1i_ts = e1inp_line_ipa_rsl_ts(line, trx_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+        struct ipaccess_line *il;</span><br><span> </span><br><span>        if (E1INP_SIGN_RSL+trx_nr-1 >= NUM_E1_TS) {</span><br><span>               LOGP(DLINP, LOGL_ERROR, "cannot create RSL BTS link: "</span><br><span>@@ -1144,6 +1145,17 @@</span><br><span>            return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (!line->driver_data)</span><br><span style="color: hsl(120, 100%, 40%);">+            line->driver_data = talloc_zero(line, struct ipaccess_line);</span><br><span style="color: hsl(120, 100%, 40%);">+       il = line->driver_data;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Drop previous line */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (il->ipa_cli[1 + trx_nr]) {</span><br><span style="color: hsl(120, 100%, 40%);">+             ipa_client_conn_close(il->ipa_cli[1 + trx_nr]);</span><br><span style="color: hsl(120, 100%, 40%);">+            ipa_client_conn_destroy(il->ipa_cli[1 + trx_nr]);</span><br><span style="color: hsl(120, 100%, 40%);">+          il->ipa_cli[1 + trx_nr] = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  rsl_link = ipa_client_conn_create2(tall_ipa_ctx,</span><br><span>                                       e1inp_line_ipa_rsl_ts(line, trx_nr),</span><br><span>                                         E1INP_SIGN_RSL+trx_nr,</span><br><span>@@ -1167,8 +1179,8 @@</span><br><span>             ipa_client_conn_destroy(rsl_link);</span><br><span>           return -EIO;</span><br><span>         }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    ipaccess_bts_keepalive_fsm_alloc(e1i_ts, rsl_link, "rsl_bts_to_bsc");</span><br><span style="color: hsl(120, 100%, 40%);">+       il->ipa_cli[1 + trx_nr] = rsl_link;</span><br><span>       return 0;</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-abis/+/25742">change 25742</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/libosmo-abis/+/25742"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-abis </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4ee1ae318b446490783c8b910fca10ba5f72dd5a </div>
<div style="display:none"> Gerrit-Change-Number: 25742 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>