mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-15 08:44:14 +00:00
chan_rtp.c: Fix uninitialized memory crash.
unicast_rtp_request() could pass an uninitialized 'us' parameter to ast_ouraddrfor(). If ast_ouraddrfor() returns an error then the 'us' parameter may not get initialized. Thus when the code tries to save the 'us' parameter to the local address we could try to copy a ridiculous sized memory buffer and segfault. * Made pass an initialized 'us' parameter to ast_ouraddrfor() and abort the UnicastRTP channel request if it fails. ASTERISK-26672 Change-Id: I1ef7a7c09f4da4f15dcb6de660d2bcac5f2a95c0
This commit is contained in:
@@ -316,7 +316,12 @@ static struct ast_channel *unicast_rtp_request(const char *type, struct ast_form
|
|||||||
engine_name = S_COR(ast_test_flag(&opts, OPT_RTP_ENGINE),
|
engine_name = S_COR(ast_test_flag(&opts, OPT_RTP_ENGINE),
|
||||||
opt_args[OPT_ARG_RTP_ENGINE], "asterisk");
|
opt_args[OPT_ARG_RTP_ENGINE], "asterisk");
|
||||||
|
|
||||||
ast_ouraddrfor(&address, &local_address);
|
ast_sockaddr_copy(&local_address, &address);
|
||||||
|
if (ast_ouraddrfor(&address, &local_address)) {
|
||||||
|
ast_log(LOG_ERROR, "Could not get our address for sending media to '%s'\n",
|
||||||
|
args.destination);
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
instance = ast_rtp_instance_new(engine_name, NULL, &local_address, NULL);
|
instance = ast_rtp_instance_new(engine_name, NULL, &local_address, NULL);
|
||||||
if (!instance) {
|
if (!instance) {
|
||||||
ast_log(LOG_ERROR,
|
ast_log(LOG_ERROR,
|
||||||
|
Reference in New Issue
Block a user