Module: kamailio
Branch: master
Commit: d4f3c96cdf2efc8db8fa115a35f7ea9545ea4c9f
URL: 
https://github.com/kamailio/kamailio/commit/d4f3c96cdf2efc8db8fa115a35f7ea9545ea4c9f

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2016-11-01T15:14:41+01:00

mi_datagram: safety check so the length of mi socket doesn't result in overflow

---

Modified: modules/mi_datagram/mi_datagram.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/d4f3c96cdf2efc8db8fa115a35f7ea9545ea4c9f.diff
Patch: 
https://github.com/kamailio/kamailio/commit/d4f3c96cdf2efc8db8fa115a35f7ea9545ea4c9f.patch

---

diff --git a/modules/mi_datagram/mi_datagram.c 
b/modules/mi_datagram/mi_datagram.c
index 3260420..a06e2f2 100644
--- a/modules/mi_datagram/mi_datagram.c
+++ b/modules/mi_datagram/mi_datagram.c
@@ -200,7 +200,7 @@ static int mi_mod_init(void)
                        LM_ERR("invalid port number; must be in 
[1024,%d]\n",MAX_NB_PORT);
                        return -1;
                }
-               
+
                if(! (host = resolvehost(host_s)) ) {
                        LM_ERR("failed to resolve %s\n", host_s);
                        return -1;
@@ -212,10 +212,10 @@ static int mi_mod_init(void)
                }
                mi_socket_domain = host->h_addrtype;
                goto done;
-       } 
+       }
        /* in case of a Unix socket*/
        LM_DBG("we have an UNIX socket\n");
-               
+
        n=stat(mi_socket, &filestat);
        if( n==0) {
                LM_INFO("the socket %s already exists, trying to delete 
it...\n", mi_socket);
@@ -235,14 +235,14 @@ static int mi_mod_init(void)
                LM_WARN("cannot specify mi_unix_socket_mode = 0, forcing it to 
rw-------\n");
                mi_unix_socket_mode = S_IRUSR| S_IWUSR;
        }
-       
+
        if (mi_unix_socket_uid_s) {
                if (user2uid(&mi_unix_socket_uid, &mi_unix_socket_gid, 
mi_unix_socket_uid_s)<0) {
                        LM_ERR("bad user name %s\n", mi_unix_socket_uid_s);
                        return -1;
                }
        }
-       
+
        if (mi_unix_socket_gid_s) {
                if (group2gid(&mi_unix_socket_gid, mi_unix_socket_gid_s)<0) {
                        LM_ERR("bad group name %s\n", mi_unix_socket_gid_s);
@@ -252,7 +252,11 @@ static int mi_mod_init(void)
 
        /*create the unix socket address*/
        mi_dtgram_addr.unix_addr.sun_family = AF_LOCAL;
-       memcpy( mi_dtgram_addr.unix_addr.sun_path, mi_socket, 
strlen(mi_socket));
+       if(strlen(mi_socket)>=sizeof(mi_dtgram_addr.unix_addr.sun_path)-1) {
+               LM_ERR("mi socket path is too long\n");
+               return -1;
+       }
+       memcpy(mi_dtgram_addr.unix_addr.sun_path, mi_socket, strlen(mi_socket));
 
 done:
        /* add space for extra processes */
@@ -369,7 +373,7 @@ static int mi_destroy(void)
                if (n==0) {
                        if(config_check==0) {
                                if (unlink(mi_socket)<0){
-                                       LM_ERR("cannot delete the socket (%s): 
%s\n", 
+                                       LM_ERR("cannot delete the socket (%s): 
%s\n",
                                                mi_socket, strerror(errno));
                                        goto error;
                                }


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to