From 9f51161c61c65c8d1c65216c930468d806a8500f Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 6 Nov 2013 09:53:09 -0500 Subject: [PATCH] fix possible segfault on incorrect sp/SP flag usage --- daemon/call.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index bc713f446..e23c36765 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -274,8 +274,10 @@ void kernelize(struct callstream *c) { memcpy(mpt.dst_addr.ipv6, &r->peer.ip46, sizeof(mpt.src_addr.ipv6)); } - r->handler->kernel_decrypt(&mpt.decrypt, r); - r->handler->kernel_encrypt(&mpt.encrypt, r); + if (r->handler->kernel_decrypt(&mpt.decrypt, r)) + goto no_kernel_stream; + if (r->handler->kernel_encrypt(&mpt.encrypt, r)) + goto no_kernel_stream; if (!mpt.encrypt.cipher || !mpt.encrypt.hmac) goto no_kernel_stream; @@ -354,6 +356,9 @@ static int __k_null(struct mediaproxy_srtp *s, struct streamrelay *r) { return 0; } static int __k_srtp_crypt(struct mediaproxy_srtp *s, struct crypto_context *c) { + if (!c->crypto_suite) + return -1; + *s = (struct mediaproxy_srtp) { .cipher = c->crypto_suite->kernel_cipher, .hmac = c->crypto_suite->kernel_hmac,