From patchwork Fri Apr 22 12:41:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Kostanbaev X-Patchwork-Id: 613581 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.osmocom.org (lists.osmocom.org [144.76.43.76]) by ozlabs.org (Postfix) with ESMTP id 3qrwGg0Jkmz9t3h for ; Fri, 22 Apr 2016 22:41:30 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=u0SXDHPP; dkim-atps=neutral Received: from lists.osmocom.org (lists.osmocom.org [144.76.43.76]) by lists.osmocom.org (Postfix) with ESMTP id 71B231313E; Fri, 22 Apr 2016 12:41:29 +0000 (UTC) X-Original-To: openbsc@lists.osmocom.org Delivered-To: openbsc@lists.osmocom.org Received: from mail-wm0-x231.google.com (mail-wm0-x231.google.com [IPv6:2a00:1450:400c:c09::231]) by lists.osmocom.org (Postfix) with ESMTP id B28A613103 for ; Fri, 22 Apr 2016 12:41:25 +0000 (UTC) Received: by mail-wm0-x231.google.com with SMTP id u206so24982043wme.1 for ; Fri, 22 Apr 2016 05:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=EEKdWR7aqOs72G6rVRqxcupsJk82LOtSLb7oBEq/Ods=; b=u0SXDHPPirgQt0KkNM4bUcV8K37qxzZx2mtkmTydyVBFXVS32/bu68MiF3vjCBY3/3 6DMmeLEaJJToXmXmu4jCdWBdwPEa4p6ghRKmlSIC82tEIN2HsTh84oGfEPZxkv3cbThr M3MNavdIBb+lKsyc6RykmBU8T56CJq6pSBPfrIg9emyIU8S6PK7lLYTzKbXFmNGI13Kv Ge7rzW2EGp/tyUyjW23i4MznKQCOXpFRgip6x315/GaJ7m9g7AeSxdt4GYXY5ua5gtiE Z9sY5hhh/mH7AUzQvNuMgiwef3mASUPSARr8i8K8gZ8KYSKpcCEGEAMxgE9gDuoi6iCm wVsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=EEKdWR7aqOs72G6rVRqxcupsJk82LOtSLb7oBEq/Ods=; b=Bl5GF2kK7z29obsY3wS2wdGXU78sv3UDGmrH26gu0Nx9jcDnxL8WqkjqT0+cwCMoka j92ULz/48X2VXxuANh2PeYPnbBogCeMWEnDd0eT0bArPtPCPJ7sm8JADwnr+WPOgLmo8 fuXL5eQKuqVPkNfkF4akmW7aR2OSCrWwaXdppBzd5dTsQZ4HNZwXDPJtduNywT9GJpwz C7LHUVvxu5T8/nV6HMtmHnehnx6qwv/1UzgIdMn6zVlgNhXrrprpVxROfHly9Z2dlTq7 OAJCSrFcSPPhQxZilZvLICK+YmvIGi8TenOuKULsw6iGPxujfSakhWoGKpNYp6Ud2h+t YJ7w== X-Gm-Message-State: AOPr4FW3yoT87YrF3voSjaYl2yklc1ZJxoJHU6FTeRopgSscoK5Lvfwpip5+kL18kKDt2Q== X-Received: by 10.28.45.216 with SMTP id t207mr3605624wmt.40.1461328885062; Fri, 22 Apr 2016 05:41:25 -0700 (PDT) Received: from serg-X55SR.in-berlin.de ([185.11.247.108]) by smtp.gmail.com with ESMTPSA id r8sm3220204wme.14.2016.04.22.05.41.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 22 Apr 2016 05:41:24 -0700 (PDT) From: Sergey Kostanbaev To: openbsc@lists.osmocom.org Subject: [PATCH 2/4] gsm0480: Fix handling GSM0480_MTYPE_FACILITY, it has only LV and facility_ie Date: Fri, 22 Apr 2016 14:41:13 +0200 Message-Id: <1461328875-8253-2-git-send-email-sergey.kostanbaev@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1461328875-8253-1-git-send-email-sergey.kostanbaev@gmail.com> References: <1461328875-8253-1-git-send-email-sergey.kostanbaev@gmail.com> X-BeenThere: openbsc@lists.osmocom.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Development of OpenBSC, OsmoBSC, OsmoNITB, OsmoCSCN" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openbsc-bounces@lists.osmocom.org Sender: "OpenBSC" From: Sergey Kostanbaev --- src/gsm/gsm0480.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c index 55bddd5..9fc77a0 100644 --- a/src/gsm/gsm0480.c +++ b/src/gsm/gsm0480.c @@ -196,6 +196,8 @@ static int parse_ss(const struct gsm48_hdr *hdr, uint16_t len, struct ss_request *req); static int parse_ss_info_elements(const uint8_t *ussd_ie, uint16_t len, struct ss_request *req); +static int parse_ss_facility(const uint8_t *ss_facility, uint16_t len, + struct ss_request *req); static int parse_facility_ie(const uint8_t *facility_ie, uint16_t length, struct ss_request *req); static int parse_ss_invoke(const uint8_t *invoke_data, uint16_t length, @@ -271,9 +273,11 @@ static int parse_ss(const struct gsm48_hdr *hdr, uint16_t len, struct ss_request req->ussd_text[0] = 0xFF; break; case GSM0480_MTYPE_REGISTER: - case GSM0480_MTYPE_FACILITY: rc &= parse_ss_info_elements(&hdr->data[0], len - sizeof(*hdr), req); break; + case GSM0480_MTYPE_FACILITY: + rc &= parse_ss_facility(&hdr->data[0], len - sizeof(*hdr), req); + break; default: LOGP(0, LOGL_DEBUG, "Unknown GSM 04.80 message-type field 0x%02x\n", hdr->msg_type); @@ -284,6 +288,18 @@ static int parse_ss(const struct gsm48_hdr *hdr, uint16_t len, struct ss_request return rc; } +static int parse_ss_facility(const uint8_t *ss_facility, uint16_t len, + struct ss_request *req) +{ + uint8_t facility_length; + + facility_length = ss_facility[0]; + if (len - 1 < facility_length) + return 0; + + return parse_facility_ie(ss_facility + 1, facility_length, req); +} + static int parse_ss_info_elements(const uint8_t *ss_ie, uint16_t len, struct ss_request *req) {