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: Iedc3c10eabb41ad4da854ab8d0cf45759bbedcc7
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
Name: stc-manager
Summary: STC(Smart Traffic Control) manager
Name: stc-manager
Summary: STC(Smart Traffic Control) manager
Release: 0
Group: Network & Connectivity/Other
License: Apache-2.0
Release: 0
Group: Network & Connectivity/Other
License: Apache-2.0
-static void __proc_tree_add(proc_key_s *key,
- proc_value_s *value)
+static void __proc_tree_add(proc_key_s *key, proc_value_s *value)
{
proc_value_s *lookup;
proc_value_s *parent;
{
proc_value_s *lookup;
proc_value_s *parent;
+ if (key == NULL || value == NULL) {
+ if (STC_DEBUG_LOG)
+ STC_LOGE("invalid parameters");
+ return;
+ }
+
lookup = g_tree_lookup(proc_tree, key);
if (lookup) {
if (STC_DEBUG_LOG)
STC_LOGD("LOOKUP: tgid[\033[1;33m%s\033[0;m] pid[%s] ppid[\033[1;35m%s\033[0;m] "
lookup = g_tree_lookup(proc_tree, key);
if (lookup) {
if (STC_DEBUG_LOG)
STC_LOGD("LOOKUP: tgid[\033[1;33m%s\033[0;m] pid[%s] ppid[\033[1;35m%s\033[0;m] "
- "cmdline[\033[0;34m%s\033[0;m] name[%s]", lookup->status[PROC_STATUS_TGID],
- lookup->status[PROC_STATUS_PID], lookup->status[PROC_STATUS_PPID],
- lookup->cmdline, lookup->status[PROC_STATUS_NAME]);
+ "cmdline[\033[0;34m%s\033[0;m] name[%s]", lookup->status[PROC_STATUS_TGID],
+ lookup->status[PROC_STATUS_PID], lookup->status[PROC_STATUS_PPID],
+ lookup->cmdline, lookup->status[PROC_STATUS_NAME]);
+ 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));
+
if (STC_DEBUG_LOG)
STC_LOGD("cmdline [%s] pid[%s] ppid[%s]", value->cmdline,
if (STC_DEBUG_LOG)
STC_LOGD("cmdline [%s] pid[%s] ppid[%s]", value->cmdline,
- value->status[PROC_STATUS_PID], value->status[PROC_STATUS_PPID]);
+ 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();
if (STC_DEBUG_LOG)
__proc_tree_printall();
- parent = __proc_tree_find_parent(value);
+ parent = __proc_tree_find_parent(proc_value);
- 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
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)
}
static void __proc_tree_remove(const proc_key_s *key)
char cmdline[PROC_NAME_MAX] = {0, };
char status[PROC_STATUS_CNT][PROC_BUF_MAX];
char cmdline[PROC_NAME_MAX] = {0, };
char status[PROC_STATUS_CNT][PROC_BUF_MAX];
+ /* TODO: Add newly created thread to the process tasks */
+ if (tgid != pid)
+ return;
+
memset(status, 0x0, sizeof(status));
if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
memset(status, 0x0, sizeof(status));
if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
- 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));
for (i = 0; i < PROC_STATUS_CNT; ++i)
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] "
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] "
status[PROC_STATUS_NAME], status[PROC_STATUS_STATE], status[PROC_STATUS_TRACERPID]);
}
status[PROC_STATUS_NAME], status[PROC_STATUS_STATE], status[PROC_STATUS_TRACERPID]);
}
- __proc_tree_add(key, value);
+ __proc_tree_add(&key, &value);
char cmdline[PROC_NAME_MAX] = {0, };
char status[PROC_STATUS_CNT][PROC_BUF_MAX];
char cmdline[PROC_NAME_MAX] = {0, };
char status[PROC_STATUS_CNT][PROC_BUF_MAX];
+ /* TODO: Add newly created thread to the process tasks */
+ if (tgid != pid)
+ return;
+
memset(status, 0x0, sizeof(status));
if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
memset(status, 0x0, sizeof(status));
if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
- 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));
for (i = 0; i < PROC_STATUS_CNT; ++i)
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] "
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] "
status[PROC_STATUS_NAME], status[PROC_STATUS_STATE], status[PROC_STATUS_TRACERPID]);
}
status[PROC_STATUS_NAME], status[PROC_STATUS_STATE], status[PROC_STATUS_TRACERPID]);
}
- __proc_tree_add(key, value);
+ __proc_tree_add(&key, &value);
-stc_error_e stc_plugin_procfs_status_changed(stc_cmd_type_e cmd,
- pid_t pid, const gchar *app_id, const gchar *pkg_id, stc_app_type_e app_type)
+stc_error_e stc_plugin_procfs_status_changed(stc_cmd_type_e cmd, pid_t pid,
+ const gchar *app_id,
+ const gchar *pkg_id,
+ stc_app_type_e app_type)
{
stc_error_e ret = STC_ERROR_NONE;
{
stc_error_e ret = STC_ERROR_NONE;