return;
}
- strncpy(bmi->path, monitoring_path, sizeof(bmi->path));
+ strncpy(bmi->path, monitoring_path, sizeof(bmi->path) - 1);
block_monitor_list = g_slist_prepend(block_monitor_list, bmi);
}
enum meminfo_id i;
for (i = 0; i < MEMINFO_ID_MAX; i++)
- if (remain_mask & (1 << i))
+ if (remain_mask & (1ULL << i))
_E("Failed to get meminfo: '%s'",
meminfo_id_to_string(i));
}
unsigned int v = 0;
l = strcspn(buf, ":");
- if (l >= sizeof(buf) || !buf[l])
+ if (l >= sizeof(buf) - 2 || !buf[l])
goto totmaps_error;
buf[l] = 0;
}
l = strcspn(buf, ":");
+ if (l >= sizeof(buf) - 2 || !buf[l])
+ goto on_error;
+
if (!l)
break;
tzplatform_set_user(elem->uid);
root_path = strdup(tzplatform_getenv(TZ_USER_CONTENT));
tzplatform_reset_user();
- if (!root_path)
+ if (!root_path) {
_E("Fail to get content path of uid %d", elem->uid);
+ continue;
+ }
if (!access(root_path, R_OK)) {
_D("Find new root path : %s", root_path);
*paths = g_slist_append(*paths, root_path);
- }
+ } else
+ free(root_path);
}
break;
case EXTERNAL:
average_pwr = atof(result->value);
_I("average_power: %lf", average_pwr);
} else if (!strncmp(result->name, "OCV_SOC_POLY_COEF", sizeof("OCV_SOC_POLY_COEF") + 1)) {
- char *token, *saveptr;
+ char *token, *saveptr = NULL;
int i;
token = strtok_r(result->value, " ", &saveptr);
if (token) {
{
static char *prev_dir;
char *cg_dir = (char *)data;
- int ret, oom_score_adj = 0;
+ int ret;
unsigned int usage = 0, max_mem = 0, anon_usage = 0;
uint64_t dummy_efd;
pid_t main_pid;
char appname[PROC_NAME_MAX];
struct memory_limit_event *mle;
- struct memory_limit_log *mlog;
+ struct memory_limit_log *mlog = NULL;
_cleanup_free_ struct cgroup_memory_stat *mem_stat = NULL;
ret = read(fd, &dummy_efd, sizeof(dummy_efd));
_D("there is no victim, removed cgroup : %s", cg_dir);
goto invalid_cgroup;
}
- proc_get_oom_score_adj(main_pid, &oom_score_adj);
- proc_get_cmdline(main_pid, appname);
+
+ ret = proc_get_cmdline(main_pid, appname);
+ if (ret)
+ _D("fail to get appname");
_E("kill %d (name %s, memory %d) by exceeding the threshold (%d)",
- main_pid, appname, max_mem, mle->threshold);
+ main_pid, appname ? appname : NULL, max_mem, mle->threshold);
} else {
char *filename;
_D("there is no victim, removed cgroup : %s", cg_dir);
goto invalid_cgroup;
}
- proc_get_oom_score_adj(main_pid, &oom_score_adj);
filename = strrchr(cg_dir, '/');
snprintf(appname, sizeof(appname), "kerneloom_%s", filename ? filename+1 : cg_dir);
invalid_cgroup:
g_hash_table_remove(memory_limit_hash, cg_dir);
+ if (mlog)
+ free(mlog);
return false;
}
g_slist_free_full(memcg_tree[i]->cgroups, free);
free(memcg_tree[i]);
}
- if (event_level != (char*)MEMCG_DEFAULT_EVENT_LEVEL)
+ if (strncmp(event_level, MEMCG_DEFAULT_EVENT_LEVEL, sizeof(MEMCG_DEFAULT_EVENT_LEVEL)))
free(event_level);
lowmem_deactivate_worker();
pai->memory.memcg_info = mi;
if (index == MEMCG_LIMIT)
pai->memory.use_mem_limit = true;
+
+ free(cgpath);
}
static struct module_ops memory_modules_ops = {