diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2017-08-07 14:01:01 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2017-08-27 02:33:48 +0200 |
commit | f00d810e217f52e98644f87c75e3789b6e0f2b6a (patch) | |
tree | bbb2bb7414894b5cb8c2ac221e950a7790157ec2 /src/libmsc/smpp_openbsc.c | |
parent | c0227194a31513952454b45bf13da434bc6cf692 (diff) |
libmsc: do not leak pending SMPP command object on error path
Make sure the SMPP command object is released on errors.
Change-Id: I474584425d23fb379a9d71b33e29ac0e24f01e61
Diffstat (limited to 'src/libmsc/smpp_openbsc.c')
-rw-r--r-- | src/libmsc/smpp_openbsc.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c index b3f9bbb4d..394827bed 100644 --- a/src/libmsc/smpp_openbsc.c +++ b/src/libmsc/smpp_openbsc.c @@ -521,7 +521,7 @@ void smpp_cmd_ack(struct osmo_smpp_cmd *cmd) conn = connection_for_subscr(cmd->vsub); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -529,10 +529,11 @@ void smpp_cmd_ack(struct osmo_smpp_cmd *cmd) if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } gsm411_send_rp_ack(trans, cmd->sms->gsm411.msg_ref); +out: smpp_cmd_free(cmd); } @@ -545,7 +546,7 @@ void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status) conn = connection_for_subscr(cmd->vsub); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -553,14 +554,14 @@ void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status) if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } if (smpp_to_gsm411_err(status, &gsm411_cause) < 0) gsm411_cause = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER; gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, gsm411_cause); - +out: smpp_cmd_free(cmd); } |