Module: kamailio Branch: 5.2 Commit: fb9894915bba17927ef6edd69a0b8606ac109a53 URL: https://github.com/kamailio/kamailio/commit/fb9894915bba17927ef6edd69a0b8606...
Author: Henning Westerholt hw@kamailio.org Committer: Henning Westerholt hw@kamailio.org Date: 2018-12-30T18:42:28+01:00
cdp: fix three coverity errors (ressource leaks and error checks)
- fix an ressource leak related to library call getaddrinfo - add missing error checks for setsockopts and fcntl calls
(cherry picked from commit 967a71687aa63a253d495ba49351ae916713a452)
---
Modified: src/modules/cdp/receiver.c
---
Diff: https://github.com/kamailio/kamailio/commit/fb9894915bba17927ef6edd69a0b8606... Patch: https://github.com/kamailio/kamailio/commit/fb9894915bba17927ef6edd69a0b8606...
---
diff --git a/src/modules/cdp/receiver.c b/src/modules/cdp/receiver.c index 2b4da266e3..4278bde951 100644 --- a/src/modules/cdp/receiver.c +++ b/src/modules/cdp/receiver.c @@ -839,6 +839,7 @@ int receive_loop(peer *original_peer) int peer_connect(peer *p) { int sock; + int tmp = 0; unsigned int option = 1;
struct addrinfo *ainfo=0,*res=0,*sainfo=0,hints; @@ -930,10 +931,21 @@ int peer_connect(peer *p) }
x=fcntl(sock,F_GETFL,0); - fcntl(sock,F_SETFL,x & (~O_NONBLOCK)); + if (x == -1) { + LM_ERR("error during first fcntl operation\n"); + goto error; + } + tmp = fcntl(sock,F_SETFL,x & (~O_NONBLOCK)); + if (tmp == -1) { + LM_ERR("error during second fcntl operation\n"); + goto error; + } + } + tmp = setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&option,sizeof(option)); + if (tmp == -1) { + LM_ERR("could not set socket options\n"); + goto error; } - setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&option,sizeof(option)); - LM_INFO("peer_connect(): Peer %.*s:%d connected\n",p->fqdn.len,p->fqdn.s,p->port);
if (!send_fd(p->fd_exchange_pipe,sock,p)){ @@ -943,10 +955,12 @@ int peer_connect(peer *p) }
if (res) freeaddrinfo(res); + if (sainfo) freeaddrinfo(sainfo); return sock; } error: if (res) freeaddrinfo(res); + if (sainfo) freeaddrinfo(sainfo); return -1; }