[Asterisk-code-review] chan sip: Fix reference leaks in error paths. (asterisk[master])
Corey Farrell
asteriskteam at digium.com
Sat Jul 9 13:39:03 CDT 2016
Corey Farrell has uploaded a new change for review.
https://gerrit.asterisk.org/3163
Change subject: chan_sip: Fix reference leaks in error paths.
......................................................................
chan_sip: Fix reference leaks in error paths.
* get_sip_pvt_from_replaces leaks sip_pvt_ptr on any error.
* build_peer leaks peer on failure to allocate the endpoint.
This patch fixes get_sip_pvt by using an RAII_VAR, build_peer is fixed
with an unref in the appropriate place.
ASTERISK-26184 #close
Change-Id: I728b424648ad041409f7d90880f4c28b3ce2ca12
---
M channels/chan_sip.c
1 file changed, 5 insertions(+), 1 deletion(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/63/3163/1
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 28379ff..599ecd6 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -18386,7 +18386,7 @@
static int get_sip_pvt_from_replaces(const char *callid, const char *totag,
const char *fromtag, struct sip_pvt **out_pvt, struct ast_channel **out_chan)
{
- struct sip_pvt *sip_pvt_ptr;
+ RAII_VAR(struct sip_pvt *, sip_pvt_ptr, NULL, ao2_cleanup);
struct sip_pvt tmp_dialog = {
.callid = callid,
};
@@ -18460,6 +18460,9 @@
*out_chan = sip_pvt_ptr->owner ? ast_channel_ref(sip_pvt_ptr->owner) : NULL;
}
}
+
+ /* If we're here sip_pvt_ptr has been copied to *out_pvt, prevent RAII_VAR cleanup */
+ sip_pvt_ptr = NULL;
return 0;
}
@@ -31095,6 +31098,7 @@
return NULL;
}
if (!(peer->endpoint = ast_endpoint_create("SIP", name))) {
+ ao2_t_ref(peer, -1, "failed to allocate endpoint, drop peer");
return NULL;
}
if (!(peer->caps = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {
--
To view, visit https://gerrit.asterisk.org/3163
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I728b424648ad041409f7d90880f4c28b3ce2ca12
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Corey Farrell <git at cfware.com>
More information about the asterisk-code-review
mailing list