aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-02-05 12:01:32 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2013-04-06 23:24:10 +0200
commitb36ad2debed2906674b0dc92062437d38994901e (patch)
tree46094f8cb775a57fb0bbd1b10e1b8af67fccbf42
parent6e182087f4ef6cc73f245e0fbc5db11916651ba0 (diff)
Fix of potential memory leaks at lapdm.c
-rw-r--r--src/gsm/lapdm.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/gsm/lapdm.c b/src/gsm/lapdm.c
index 2bda48ae..71045aa1 100644
--- a/src/gsm/lapdm.c
+++ b/src/gsm/lapdm.c
@@ -687,7 +687,8 @@ int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le)
if (oph->sap != SAP_GSM_PH) {
LOGP(DLLAPD, LOGL_ERROR, "primitive for unknown SAP %u\n",
oph->sap);
- return -ENODEV;
+ rc = -ENODEV;
+ goto free;
}
switch (oph->primitive) {
@@ -695,7 +696,8 @@ int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le)
if (oph->operation != PRIM_OP_INDICATION) {
LOGP(DLLAPD, LOGL_ERROR, "PH_DATA is not INDICATION %u\n",
oph->operation);
- return -ENODEV;
+ rc = -ENODEV;
+ goto free;
}
rc = l2_ph_data_ind(oph->msg, le, pp->u.data.chan_nr,
pp->u.data.link_id);
@@ -704,7 +706,8 @@ int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le)
if (oph->operation != PRIM_OP_INDICATION) {
LOGP(DLLAPD, LOGL_ERROR, "PH_RTS is not INDICATION %u\n",
oph->operation);
- return -ENODEV;
+ rc = -ENODEV;
+ goto free;
}
rc = l2_ph_data_conf(oph->msg, le);
break;
@@ -718,12 +721,22 @@ int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le)
rc = l2_ph_chan_conf(oph->msg, le, pp->u.rach_ind.fn);
break;
default:
- return -EIO;
+ rc = -EIO;
+ goto free;
}
break;
+ default:
+ LOGP(DLLAPD, LOGL_ERROR, "Unknown primitive %u\n",
+ oph->primitive);
+ rc = -EINVAL;
+ goto free;
}
return rc;
+
+free:
+ msgb_free(oph->msg);
+ return rc;
}