osmith has submitted this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/34174 )
Change subject: gsm48_cc_tx_call_proc_…: verify bcap.transfer ......................................................................
gsm48_cc_tx_call_proc_…: verify bcap.transfer
Fail if MNCC tries to switch the Information Transfer Capability from CSD to speech, so it is obvious that something is wrong here. I ran into this while writing a test.
Related: OS#4394 Change-Id: Ibb76d08cad1ac3bc3320391c89766150a2e605c3 --- M src/libmsc/gsm_04_08_cc.c 1 file changed, 22 insertions(+), 0 deletions(-)
Approvals: pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve osmith: Looks good to me, approved
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c index 4162944..5908db9 100644 --- a/src/libmsc/gsm_04_08_cc.c +++ b/src/libmsc/gsm_04_08_cc.c @@ -1047,6 +1047,14 @@
/* bearer capability */ if (proceeding->fields & MNCC_F_BEARER_CAP) { + /* MNCC should not switch from e.g. CSD to speech */ + if (proceeding->bearer_cap.transfer != trans->bearer_cap.transfer) { + LOG_TRANS(trans, LOGL_ERROR, "Unexpected Information Transfer Capability %d from MNCC," + " transaction has %d\n", + proceeding->bearer_cap.transfer, + trans->bearer_cap.transfer); + return -EINVAL; + } gsm48_encode_bearer_cap(msg, 0, &proceeding->bearer_cap); memcpy(&trans->bearer_cap, &proceeding->bearer_cap, sizeof(trans->bearer_cap)); }