diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c index a1fea9aa1..ba6a19738 100644 --- a/src/libmsc/gsm_04_08_cc.c +++ b/src/libmsc/gsm_04_08_cc.c @@ -1076,8 +1076,16 @@ static int gsm48_cc_rx_release(struct gsm_trans *trans, struct msgb *msg) static int gsm48_cc_tx_release(struct gsm_trans *trans, void *arg) { struct gsm_mncc *rel = arg; - struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 CC REL"); - struct gsm48_hdr *gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh)); + struct msgb *msg; + struct gsm48_hdr *gh; + + if (!trans->msc_a) { + LOG_TRANS(trans, LOGL_DEBUG, "Cannot send CC REL, there is no MSC-A connection\n"); + return -EINVAL; + } + + msg = gsm48_msgb_alloc_name("GSM 04.08 CC REL"); + gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh)); gh->msg_type = GSM48_MT_CC_RELEASE; diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c index 553761fe3..b3e2e32c3 100644 --- a/src/libmsc/msc_a.c +++ b/src/libmsc/msc_a.c @@ -1562,6 +1562,15 @@ int msc_a_tx_dtap_to_i(struct msc_a *msc_a, struct msgb *dtap) { struct ran_msg ran_msg; + if (!msc_a) { + struct gsm48_hdr *gh = msgb_l3(dtap) ? : dtap->data; + uint8_t pdisc = gsm48_hdr_pdisc(gh); + LOGP(DMSC, LOGL_ERROR, "Attempt to send DTAP to NULL MSC-A, dropping message: %s %s\n", + gsm48_pdisc_name(pdisc), gsm48_pdisc_msgtype_name(pdisc, gsm48_hdr_msg_type(gh))); + msgb_free(dtap); + return -EIO; + } + if (msc_a->c.ran->type == OSMO_RAT_EUTRAN_SGS) { /* The SGs connection to the MME always is at the MSC-A. */ return sgs_iface_tx_dtap_ud(msc_a, dtap);