aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmsc/a_iface_bssap.c
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2018-02-14 14:12:24 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2018-02-14 14:31:45 +0100
commit75559284d08654eff7f5d18eacb5c039af33f824 (patch)
tree147fb177b1ef08a661bb213d53e8e2e1f64bf23b /src/libmsc/a_iface_bssap.c
parent31776ff58f8864d5581e7eb49dff602fa3648108 (diff)
libmsc: bssap: Catch TLV parse failures
Diffstat (limited to 'src/libmsc/a_iface_bssap.c')
-rw-r--r--src/libmsc/a_iface_bssap.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c
index 1adbe6963..2947d85e1 100644
--- a/src/libmsc/a_iface_bssap.c
+++ b/src/libmsc/a_iface_bssap.c
@@ -522,13 +522,19 @@ static int rx_bssmap(struct osmo_sccp_user *scu, const struct a_conn_info *a_con
{
struct gsm_subscriber_connection *conn;
struct tlv_parsed tp;
+ int rc;
if (msgb_l3len(msg) < 1) {
LOGP(DBSSAP, LOGL_NOTICE, "Error: No data received -- discarding message!\n");
return -1;
}
- tlv_parse(&tp, gsm0808_att_tlvdef(), msg->l3h + 1, msgb_l3len(msg) - 1, 0, 0);
+ rc = tlv_parse(&tp, gsm0808_att_tlvdef(), msg->l3h + 1, msgb_l3len(msg) - 1, 0, 0);
+ if (rc < 0) {
+ LOGP(DBSSAP, LOGL_ERROR, "Failed parsing TLV -- discarding message! %s\n",
+ osmo_hexdump(msg->l3h, msgb_l3len(msg)));
+ return -EINVAL;
+ }
/* Only message types allowed without a 'conn' */
switch (msg->l3h[0]) {