<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18907">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">assignment_fsm: fix assignment_count(): conn->lchan may be NULL<br><br>Starting from ttcn3-bsc-test-sccplite build #777, it was niticed<br>that osmo-bsc crashes with the following message:<br><br>  Assert failed conn->lchan include/osmocom/bsc/gsm_data.h:1376<br><br>Here is a backtrace:<br><br>  Program received signal SIGABRT<br>  pwndbg> bt<br>    0x0000555555be6e52 in conn_get_bts (conn=0x622000057160) at include/osmocom/bsc/gsm_data.h:1376<br>    0x0000555555c1edc8 in assignment_fsm_timer_cb (fi=0x612000060220) at assignment_fsm.c:758<br>    0x00007ffff72b1104 in fsm_tmr_cb (data=0x612000060220) at libosmocore/src/fsm.c:325<br>    0x00007ffff72ab062 in osmo_timers_update () at libosmocore/src/timer.c:257<br>    0x00007ffff72ab5d2 in _osmo_select_main (polling=0) at libosmocore/src/select.c:260<br>    0x00007ffff72abd2f in osmo_select_main_ctx (polling=<optimized out>) at libosmocore/src/select.c:291<br>    0x0000555555e1b81b in main (argc=3, argv=0x7fffffffe1b8) at osmo_bsc_main.c:953<br>    0x00007ffff6752002 in __libc_start_main () from /usr/lib/libc.so.6<br>    0x0000555555b61bbe in _start ()<br><br>Apparently conn->lchan can be NULL, so assignment_count() must be<br>safe against this. Let's add a guard 'if' statement there.<br><br>Yes, we miss a chance to increase a counter in such case, but this<br>is a separate problem. The main point is that osmo-bsc must not crash.<br><br>Change-Id: Id681dfb0ad654bdb4b71805d1ad4f39a8bf6bbd1<br>Fixes: I0009e51d4caf68e762138d98e2e23d49acc3cc1a<br>Related: OS#4620, OS#4619<br>---<br>M src/osmo-bsc/assignment_fsm.c<br>1 file changed, 8 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/07/18907/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c</span><br><span>index 94dd359..dee7983 100644</span><br><span>--- a/src/osmo-bsc/assignment_fsm.c</span><br><span>+++ b/src/osmo-bsc/assignment_fsm.c</span><br><span>@@ -73,14 +73,20 @@</span><br><span>            on_assignment_failure(_conn); \</span><br><span>      } while(0)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* NOTE: make sure that conn->lchan is not NULL before calling this macro! */</span><br><span style="color: hsl(120, 100%, 40%);">+#define assignment_count_bts(conn, counter) do { \</span><br><span style="color: hsl(120, 100%, 40%);">+          struct gsm_bts *bts = conn_get_bts(conn); \</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_##counter]); \</span><br><span style="color: hsl(120, 100%, 40%);">+ } while (0)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Assume presence of local var 'conn' as struct gsm_subscriber_connection */</span><br><span> #define assignment_count(counter) do { \</span><br><span style="color: hsl(0, 100%, 40%);">-              struct gsm_bts *bts = conn_get_bts(conn); \</span><br><span>          LOG_ASSIGNMENT(conn, LOGL_DEBUG, "incrementing rate counter: %s %s\n", \</span><br><span>                          bsc_ctr_description[BSC_##counter].name, \</span><br><span>                           bsc_ctr_description[BSC_##counter].description); \</span><br><span>            rate_ctr_inc(&conn->network->bsc_ctrs->ctr[BSC_##counter]); \</span><br><span style="color: hsl(0, 100%, 40%);">-              rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_##counter]); \</span><br><span style="color: hsl(120, 100%, 40%);">+         if (conn->lchan != NULL) \</span><br><span style="color: hsl(120, 100%, 40%);">+                 assignment_count_bts(conn, counter) \</span><br><span>        } while(0)</span><br><span> </span><br><span> #define assignment_count_result(counter) do { \</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18907">change 18907</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-bsc/+/18907"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id681dfb0ad654bdb4b71805d1ad4f39a8bf6bbd1 </div>
<div style="display:none"> Gerrit-Change-Number: 18907 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>