Fix: Malloc only when making process entry in tree 65/179665/1 accepted/tizen/4.0/unified/20180605.090353 submit/tizen_4.0/20180601.002450
authorNishant Chaprana <n.chaprana@samsung.com>
Mon, 21 May 2018 05:06:55 +0000 (10:36 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Mon, 21 May 2018 05:06:55 +0000 (10:36 +0530)
Description:
For some processes both FORK and EXEC events are emitted, however
we were allocating mamory in both methods, but not unallocating the
memory in failure case when entry was already present.

So we should malloc only when we are creating an entry in process tree.

Change-Id: Iaf69a4f17cb677d1d34558f4aab33e0e20ae4868
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
packaging/stc-manager.spec
plugin/net-popup/data/stc_noti_datausage.png [changed mode: 0755->0644]
plugin/procfs/stc-plugin-procfs.c
resources/systemd/stc-manager.service [changed mode: 0755->0644]

index f2abca1..5a271a8 100644 (file)
@@ -1,6 +1,6 @@
 Name:       stc-manager
 Summary:    STC(Smart Traffic Control) manager
-Version:    0.0.48
+Version:    0.0.49
 Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
old mode 100755 (executable)
new mode 100644 (file)
index f6822d3..82a31c5 100644 (file)
@@ -165,21 +165,37 @@ static void __proc_tree_add(proc_key_s *key,
                return;
        }
 
+       proc_key_s *proc_key = MALLOC0(proc_key_s, 1);
+       if (proc_key == NULL) {
+               STC_LOGE("memory allocation failed");
+               return;
+       }
+
+       proc_value_s *proc_value = MALLOC0(proc_value_s, 1);
+       if (proc_value == NULL) {
+               STC_LOGE("memory allocation failed");
+               FREE(proc_key);
+               return;
+       }
+
+       memcpy(proc_key, key, sizeof(proc_key_s));
+       memcpy(proc_value, value, sizeof(proc_value_s));
+
        STC_LOGD("cmdline [%s] pid[%s] ppid[%s]", value->cmdline,
                value->status[PROC_STATUS_PID], value->status[PROC_STATUS_PPID]);
 
-       g_tree_insert(proc_tree, key, value);
+       g_tree_insert(proc_tree, proc_key, proc_value);
 
        if (STC_DEBUG_LOG)
                __proc_tree_printall();
 
-       parent = __proc_tree_find_parent(value);
+       parent = __proc_tree_find_parent(proc_value);
        if (parent != NULL)
-               stc_plugin_procfs_status_changed(STC_CMD_SET_SERVICE_LAUNCHED, key->pid,
+               stc_plugin_procfs_status_changed(STC_CMD_SET_SERVICE_LAUNCHED, proc_key->pid,
                        parent->cmdline, parent->cmdline, STC_APP_TYPE_SERVICE);
        else
-               stc_plugin_procfs_status_changed(STC_CMD_SET_SERVICE_LAUNCHED, key->pid,
-                       value->cmdline, value->cmdline, STC_APP_TYPE_SERVICE);
+               stc_plugin_procfs_status_changed(STC_CMD_SET_SERVICE_LAUNCHED, proc_key->pid,
+                       proc_value->cmdline, proc_value->cmdline, STC_APP_TYPE_SERVICE);
 }
 
 static void __proc_tree_remove(const proc_key_s *key)
@@ -276,6 +292,9 @@ static void __process_event_fork(int tgid, int pid)
        char cmdline[PROC_NAME_MAX] = {0, };
        char status[PROC_STATUS_CNT][PROC_BUF_MAX];
 
+       if (tgid != pid)
+               return;
+
        memset(status, 0x0, sizeof(status));
 
        if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
@@ -288,26 +307,16 @@ static void __process_event_fork(int tgid, int pid)
                }
 
                unsigned int i;
-               proc_key_s *key;
-               proc_value_s *value;
-
-               key = MALLOC0(proc_key_s, 1);
-               if (key == NULL) {
-                       STC_LOGE("memory allocation failed");
-                       return;
-               }
+               proc_key_s key;
+               proc_value_s value;
 
-               value = MALLOC0(proc_value_s, 1);
-               if (value == NULL) {
-                       STC_LOGE("memory allocation failed");
-                       FREE(key);
-                       return;
-               }
+               memset(&key, 0x0, sizeof(proc_key_s));
+               memset(&value, 0x0, sizeof(proc_value_s));
 
-               key->pid = tgid;
+               key.pid = tgid;
                for (i = 0; i < PROC_STATUS_CNT; ++i)
-                       g_strlcpy(value->status[i], status[i], sizeof(value->status[i]));
-               g_strlcpy(value->cmdline, cmdline, sizeof(value->cmdline));
+                       g_strlcpy(value.status[i], status[i], sizeof(value.status[i]));
+               g_strlcpy(value.cmdline, cmdline, sizeof(value.cmdline));
 
                if (STC_DEBUG_LOG) {
                        STC_LOGD("\033[1;34mFORK\033[0;m: tgid[\033[1;33m%d\033[0;m] ppid=[\033[1;35m%s\033[0;m] "
@@ -317,7 +326,7 @@ static void __process_event_fork(int tgid, int pid)
                                status[PROC_STATUS_NAME], status[PROC_STATUS_STATE], status[PROC_STATUS_TRACERPID]);
                }
 
-               __proc_tree_add(key, value);
+               __proc_tree_add(&key, &value);
        }
 }
 
@@ -326,6 +335,9 @@ static void __process_event_exec(int tgid, int pid)
        char cmdline[PROC_NAME_MAX] = {0, };
        char status[PROC_STATUS_CNT][PROC_BUF_MAX];
 
+       if (tgid != pid)
+               return;
+
        memset(status, 0x0, sizeof(status));
 
        if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
@@ -338,26 +350,16 @@ static void __process_event_exec(int tgid, int pid)
                }
 
                unsigned int i;
-               proc_key_s *key;
-               proc_value_s *value;
-
-               key = MALLOC0(proc_key_s, 1);
-               if (key == NULL) {
-                       STC_LOGE("memory allocation failed");
-                       return;
-               }
+               proc_key_s key;
+               proc_value_s value;
 
-               value = MALLOC0(proc_value_s, 1);
-               if (value == NULL) {
-                       STC_LOGE("memory allocation failed");
-                       FREE(key);
-                       return;
-               }
+               memset(&key, 0x0, sizeof(proc_key_s));
+               memset(&value, 0x0, sizeof(proc_value_s));
 
-               key->pid = tgid;
+               key.pid = tgid;
                for (i = 0; i < PROC_STATUS_CNT; ++i)
-                       g_strlcpy(value->status[i], status[i], sizeof(value->status[i]));
-               g_strlcpy(value->cmdline, cmdline, sizeof(value->cmdline));
+                       g_strlcpy(value.status[i], status[i], sizeof(value.status[i]));
+               g_strlcpy(value.cmdline, cmdline, sizeof(value.cmdline));
 
                if (STC_DEBUG_LOG) {
                        STC_LOGD("\033[1;32mEXEC\033[0;m: tgid[\033[1;33m%d\033[0;m] ppid=[\033[1;35m%s\033[0;m] "
@@ -367,7 +369,7 @@ static void __process_event_exec(int tgid, int pid)
                                status[PROC_STATUS_NAME], status[PROC_STATUS_STATE], status[PROC_STATUS_TRACERPID]);
                }
 
-               __proc_tree_add(key, value);
+               __proc_tree_add(&key, &value);
        }
 }
 
old mode 100755 (executable)
new mode 100644 (file)