Harald Welte has submitted this change and it was merged.

Change subject: osmo_sccp_addr_encode(): Check for more erroneous situations
......................................................................


osmo_sccp_addr_encode(): Check for more erroneous situations

... and bail out + log an error.

Change-Id: I2a419343e55edad39c59e763d11046c5a439444d
---
M src/sccp2sua.c
1 file changed, 16 insertions(+), 1 deletion(-)

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



diff --git a/src/sccp2sua.c b/src/sccp2sua.c
index ad948c9..e435d9f 100644
--- a/src/sccp2sua.c
+++ b/src/sccp2sua.c
@@ -163,13 +163,15 @@
                out->gt.gti = OSMO_SCCP_GTI_TT_ONLY;
                out->gt.tt = *cur++;
                /* abort, for national use only */
+               LOGP(DLSUA, LOGL_ERROR, "Unsupported national GTI %u\n", 
sca->global_title_indicator);
                return -EINVAL;
        case SCCP_TITLE_IND_TRANS_NUM_ENC:
                out->presence |= OSMO_SCCP_ADDR_T_GT;
                out->gt.gti = OSMO_SCCP_GTI_TT_NPL_ENC;
                out->gt.tt = *cur++;
                out->gt.npi = *cur >> 4;
-               switch (*cur++ & 0xF) {
+               encoding = *cur++ & 0xF;
+               switch (encoding) {
                case 1:
                        odd = true;
                        break;
@@ -177,6 +179,7 @@
                        odd = false;
                        break;
                default:
+                       LOGP(DLSUA, LOGL_ERROR, "Unknown GT encoding 0x%x\n", 
encoding);
                        return -1;
                }
                break;
@@ -237,11 +240,20 @@
 
        if (in->presence & OSMO_SCCP_ADDR_T_PC) {
                sca->point_code_indicator = 1;
+               /* ITU-T Q.713 states that signalling point codes are 14bit */
+               if (in->pc > 0x3fff) {
+                       LOGP(DLSUA, LOGL_ERROR, "Invalid Point Code %u 
requested\n", in->pc);
+                       return -EINVAL;
+               }
                msgb_put_u16le(msg, in->pc & 0x3ff);
        }
 
        if (in->presence & OSMO_SCCP_ADDR_T_SSN) {
                sca->ssn_indicator = 1;
+               if (in->ssn > 0xff) {
+                       LOGP(DLSUA, LOGL_ERROR, "Invalid SSN %u requested\n", 
in->ssn);
+                       return -EINVAL;
+               }
                msgb_put_u8(msg, in->ssn);
        }
 
@@ -277,6 +289,9 @@
                msgb_put_u8(msg, (in->gt.npi << 4) | (odd ? 1 : 2));
                msgb_put_u8(msg, in->gt.nai & 0x7f);
                break;
+       default:
+               LOGP(DLSUA, LOGL_ERROR, "Unsupported GTI %u requested\n", 
in->gt.gti);
+               return -EINVAL;
        }
        osmo_isup_party_encode(msg, in->gt.digits);
 

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I2a419343e55edad39c59e763d11046c5a439444d
Gerrit-PatchSet: 2
Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <[email protected]>
Gerrit-Reviewer: Harald Welte <[email protected]>
Gerrit-Reviewer: Jenkins Builder

Reply via email to