[MERGED] osmo-ttcn3-hacks[master]: GSUP: Fix handling of odd-length IMSI and 0xF filler digit

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Wed Jan 24 22:00:32 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: GSUP: Fix handling of odd-length IMSI and 0xF filler digit
......................................................................


GSUP: Fix handling of odd-length IMSI and 0xF filler digit

Change-Id: I4e0a9f1236504ce6026c6e34fd97fda6fefa832c
---
M library/GSUP_Types.ttcn
M library/IPA_Emulation.ttcn
2 files changed, 24 insertions(+), 1 deletion(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn
index 15560c7..a8134eb 100644
--- a/library/GSUP_Types.ttcn
+++ b/library/GSUP_Types.ttcn
@@ -138,6 +138,26 @@
 external function dec_GSUP_PDU(in octetstring msg) return GSUP_PDU
 	with { extension "prototype(convert) decode(RAW)" };
 
+function f_gsup_postprocess_decoded(inout GSUP_PDU gsup) {
+	if (gsup.ies[0].tag == OSMO_GSUP_IMSI_IE) {
+		/* if last digit is 'F', then there's an odd number of digits and we must strip the F */
+		var integer num_digits := lengthof(gsup.ies[0].val.imsi);
+		if (gsup.ies[0].val.imsi[num_digits-1] == 'F'H) {
+			gsup.ies[0].val.imsi := substr(gsup.ies[0].val.imsi, 0, num_digits-1);
+		}
+	}
+}
+
+function f_gsup_preprocess_encoded(inout GSUP_PDU gsup) {
+	if (ischosen(gsup.ies[0].val.imsi)) {
+		/* if number of digits is odd, add a 'F' as padding at the end */
+		var integer num_digits := lengthof(gsup.ies[0].val.imsi);
+		if (num_digits rem 2 == 1) {
+			gsup.ies[0].val.imsi := gsup.ies[0].val.imsi & 'F'H;
+		}
+	}
+}
+
 
 template GSUP_IE ts_GSUP_IE_AuthTuple2G(octetstring rand, octetstring sres,
 				        octetstring kc) := {
diff --git a/library/IPA_Emulation.ttcn b/library/IPA_Emulation.ttcn
index b40818f..b3e28e9 100644
--- a/library/IPA_Emulation.ttcn
+++ b/library/IPA_Emulation.ttcn
@@ -370,7 +370,9 @@
 }
 
 private function f_gsup_to_user(octetstring msg) runs on IPA_Emulation_CT {
-	IPA_GSUP_PORT.send(dec_GSUP_PDU(msg));
+	var GSUP_PDU gsup := dec_GSUP_PDU(msg);
+	f_gsup_postprocess_decoded(gsup);
+	IPA_GSUP_PORT.send(gsup);
 }
 
 private function f_mgcp_to_ud(octetstring payload) runs on IPA_Emulation_CT return ASP_IPA_Unitdata {
@@ -480,6 +482,7 @@
 		}
 
 		[] IPA_GSUP_PORT.receive(GSUP_PDU:?) -> value gsup_msg {
+			f_gsup_preprocess_encoded(gsup_msg);
 			payload := enc_GSUP_PDU(gsup_msg);
 			ipa_ud := valueof(t_ASP_IPA_UD(IPAC_PROTO_OSMO, payload, IPAC_PROTO_EXT_GSUP));
 			IPA_PORT.send(f_from_asp(g_ipa_conn_id, ipa_ud));

-- 
To view, visit https://gerrit.osmocom.org/6040
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I4e0a9f1236504ce6026c6e34fd97fda6fefa832c
Gerrit-PatchSet: 1
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list