Module: kamailio Branch: 5.2 Commit: 891bd927f3e519bb9fb2f23a65f21f82f2f7e0af URL: https://github.com/kamailio/kamailio/commit/891bd927f3e519bb9fb2f23a65f21f82f2f7e0af
Author: Daniel-Constantin Mierla <[email protected]> Committer: Daniel-Constantin Mierla <[email protected]> Date: 2019-08-15T12:43:58+02:00 core: forward - clone outbound buffer for SREV_NET_DATA_OUT event - this event can execute a series of callbacks, leading to leak if only the core function does pkg free - GH #2027 (cherry picked from commit 98249e2cc97e818cf7ad492132ecfea2ce13a78b) --- Modified: src/core/forward.h --- Diff: https://github.com/kamailio/kamailio/commit/891bd927f3e519bb9fb2f23a65f21f82f2f7e0af.diff Patch: https://github.com/kamailio/kamailio/commit/891bd927f3e519bb9fb2f23a65f21f82f2f7e0af.patch --- diff --git a/src/core/forward.h b/src/core/forward.h index d039900aac..a629748686 100644 --- a/src/core/forward.h +++ b/src/core/forward.h @@ -136,9 +136,18 @@ static inline int msg_send_buffer(struct dest_info* dst, char* buf, int len, outb.s = buf; outb.len = len; if(!(flags&1)) { - evp.data = (void*)&outb; - evp.dst = dst; - sr_event_exec(SREV_NET_DATA_OUT, &evp); + if(sr_event_enabled(SREV_NET_DATA_OUT)) { + outb.s = (char*)pkg_malloc(len + 1); + if(outb.s==NULL) { + LM_ERR("failed to clone outgoing buffer\n"); + return -1; + } + memcpy(outb.s, buf, len); + outb.s[len] = '\0'; + evp.data = (void*)&outb; + evp.dst = dst; + sr_event_exec(SREV_NET_DATA_OUT, &evp); + } } if(outb.s==NULL) { _______________________________________________ Kamailio (SER) - Development Mailing List [email protected] https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev
