[MERGED] osmo-mgw[master]: protocol: check the packetization in local cx options

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 31 23:37:52 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: protocol: check the packetization in local cx options
......................................................................


protocol: check the packetization in local cx options

When the local connection options in an MDCX or CRCX request
are parsed, then the packetization interval is not checked.

- Check if the packetization is a multiple of 20ms

see also TTCN3 test: MGCP_Test.TC_crcx_unsupp_packet_intv

Change-Id: I02aaa3042f2a0e32eb4ec6b8753deab7082947a0
Related: OS#2654
---
M src/libosmo-mgcp/mgcp_protocol.c
1 file changed, 28 insertions(+), 5 deletions(-)

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



diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index 73d7f5e..709c04a 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -396,7 +396,7 @@
  * The string is stored in the 'string' field. A NULL string is handled exactly
  * like an empty string, the 'string' field is never NULL after this function
  * has been called. */
-static void set_local_cx_options(void *ctx, struct mgcp_lco *lco,
+static int set_local_cx_options(void *ctx, struct mgcp_lco *lco,
 				 const char *options)
 {
 	char *p_opt, *a_opt;
@@ -420,6 +420,15 @@
 	LOGP(DLMGCP, LOGL_DEBUG,
 	     "local CX options: lco->pkt_period_max: %i, lco->codec: %s\n",
 	     lco->pkt_period_max, lco->codec);
+
+	/* Check if the packetization fits the 20ms raster */
+	if (lco->pkt_period_min % 20 && lco->pkt_period_max % 20) {
+		LOGP(DLMGCP, LOGL_ERROR,
+		     "local CX options: packetization interval is not a multiple of 20ms!\n");
+		return 535;
+	}
+
+	return 0;
 }
 
 void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change,
@@ -486,6 +495,7 @@
 	struct mgcp_conn_rtp *conn = NULL;
 	struct mgcp_conn *_conn = NULL;
 	char conn_name[512];
+	int rc;
 
 	LOGP(DLMGCP, LOGL_NOTICE, "CRCX: creating new connection ...\n");
 
@@ -587,8 +597,14 @@
 	endp->callid = talloc_strdup(tcfg->endpoints, callid);
 
 	/* Extract audio codec information */
-	set_local_cx_options(endp->tcfg->endpoints, &endp->local_options,
-			     local_options);
+	rc = set_local_cx_options(endp->tcfg->endpoints, &endp->local_options,
+				  local_options);
+	if (rc != 0) {
+		LOGP(DLMGCP, LOGL_ERROR,
+		     "CRCX: endpoint:%x inavlid local connection options!\n",
+		     ENDPOINT_NUMBER(endp));
+		return create_err_response(endp, rc, "CRCX", p->trans);
+	}
 
 	snprintf(conn_name, sizeof(conn_name), "%s", callid);
 	_conn = mgcp_conn_alloc(NULL, endp, MGCP_CONN_TYPE_RTP, conn_name);
@@ -706,6 +722,7 @@
 	const char *mode = NULL;
 	struct mgcp_conn_rtp *conn = NULL;
         const char *conn_id = NULL;
+	int rc;
 
 	LOGP(DLMGCP, LOGL_NOTICE, "MDCX: modifying existing connection ...\n");
 
@@ -778,8 +795,14 @@
 	if (have_sdp)
 		mgcp_parse_sdp_data(endp, conn, p);
 
-	set_local_cx_options(endp->tcfg->endpoints, &endp->local_options,
-			     local_options);
+	rc = set_local_cx_options(endp->tcfg->endpoints, &endp->local_options,
+				  local_options);
+	if (rc != 0) {
+		LOGP(DLMGCP, LOGL_ERROR,
+		     "MDCX: endpoint:%x inavlid local connection options!\n",
+		     ENDPOINT_NUMBER(endp));
+		return create_err_response(endp, rc, "MDCX", p->trans);
+	}
 
 	if (!have_sdp && endp->local_options.codec)
 		mgcp_set_audio_info(p->cfg, &conn->end.codec,

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I02aaa3042f2a0e32eb4ec6b8753deab7082947a0
Gerrit-PatchSet: 1
Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list