neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-msc/+/27916 )
Change subject: CM Serv Rej: do not crash on use count mismatch ......................................................................
CM Serv Rej: do not crash on use count mismatch
We may issue a CM Service Reject also in obscure situations, where no CM Service Request was permitted. In those cases, there will be no use count. Do not crash then, just don't decrement.
Related: OS#5532 Change-Id: I2009df42d1f27ec0d011e22bfc46dbc17afe7239 --- M src/libmsc/gsm_04_08.c 1 file changed, 8 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/16/27916/1
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c index b5d46fd..0983295 100644 --- a/src/libmsc/gsm_04_08.c +++ b/src/libmsc/gsm_04_08.c @@ -1513,8 +1513,15 @@ enum gsm48_reject_value cause) { struct msc_a *msc_a = msc_conn_ref; + const char *use_token; msc_gsm48_tx_mm_serv_rej(msc_a, cause); - msc_a_put(msc_a, msc_a_cm_service_type_to_use(cm_service_type)); + + /* Normally, there is a use count to be removed by the CM Service Reject. + * There has been a report though of an error situation (OS#5532) where no use count remains to be removed here. + * In that case, do not crash osmo-msc, just don't decrement it. */ + use_token = msc_a_cm_service_type_to_use(cm_service_type); + if (osmo_use_count_by(&msc_a->use_count, use_token)) + msc_a_put(msc_a, use_token); return 0; }