*
*/
+#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <stdbool.h>
{ },
};
-int proc_get_cmdline(pid_t pid, char *cmdline)
+int proc_get_cmdline(pid_t pid, char *cmdline, size_t maxcmdline)
{
+ assert(cmdline);
+ assert(maxcmdline > 0);
+
char buf[PROC_BUF_MAX];
char cmdline_buf[PROC_NAME_MAX];
char *filename;
else
filename = filename + 1;
- memcpy(cmdline, filename, PROC_NAME_MAX - 1);
- cmdline[PROC_NAME_MAX - 1] = '\0';
+ strncpy(cmdline, filename, maxcmdline - 1);
+ cmdline[maxcmdline - 1] = '\0';
return RESOURCED_ERROR_NONE;
}
pid = atoi(dentry->d_name);
if (!pid)
continue;
- ret = proc_get_cmdline(pid, appname);
+ ret = proc_get_cmdline(pid, appname, sizeof appname);
if (ret == RESOURCED_ERROR_NONE) {
if (!strncmp(cmdline, appname, strlen(appname)+1)) {
foundpid = pid;
if (pid < 1 || pid == caller)
continue;
- ret = proc_get_cmdline(pid, cmdline);
+ ret = proc_get_cmdline(pid, cmdline, sizeof cmdline);
if (ret)
continue;
* @desc get command line from /proc/{pid}/cmdline
* @return negative value if error
*/
-int proc_get_cmdline(pid_t pid, char *cmdline);
+int proc_get_cmdline(pid_t pid, char *cmdline, size_t maxcmdline);
/**
* @desc find pid with /proc/{pid}/cmdline
if (pai) {
appid = pai->appid;
} else {
- ret = proc_get_cmdline(pid, appname);
+ ret = proc_get_cmdline(pid, appname, sizeof appname);
if (ret < 0) {
_E("Failed to get cmdline basename of pid(%d)", pid);
return ret;
goto remove_mle;
}
- ret = proc_get_cmdline(main_pid, appname);
+ ret = proc_get_cmdline(main_pid, appname, sizeof appname);
if (ret)
_D("fail to get appname");
if (pai) {
cgpath = pai->appid;
} else {
- ret = proc_get_cmdline(pid, appname);
+ ret = proc_get_cmdline(pid, appname, sizeof appname);
if (ret < 0) {
_E("Failed to get cmdline basename of pid(%d)", pid);
return;
if (pid <= 0 || pid == getpid())
return RESOURCED_ERROR_FAIL;
- ret = proc_get_cmdline(pid, appname);
+ ret = proc_get_cmdline(pid, appname, sizeof appname);
if (ret == RESOURCED_ERROR_FAIL)
return RESOURCED_ERROR_FAIL;
if (!pid)
continue;
- if (proc_get_cmdline(pid, proc_name) != RESOURCED_ERROR_NONE)
+ if (proc_get_cmdline(pid, proc_name, sizeof proc_name) != RESOURCED_ERROR_NONE)
continue;
for (vip_index = 0; vip_index < vip_apps->len; vip_index++) {
return;
}
- ret = proc_get_cmdline(pid, appname);
+ ret = proc_get_cmdline(pid, appname, sizeof appname);
if (ret != RESOURCED_ERROR_NONE) {
_E("ERROR : invalid pid(%d)", pid);
return;
}
cur_oom = atoi(buf);
if (cur_oom >= select_sweep_limit) {
- ret = proc_get_cmdline(pid, appname);
+ ret = proc_get_cmdline(pid, appname, sizeof appname);
if (ret != 0) {
fclose(fp);
continue;
return 0;
}
-int LowmemLimitEnv::proc_get_cmdline(pid_t pid, char *cmdline)
+int LowmemLimitEnv::proc_get_cmdline(pid_t pid, char *cmdline, size_t maxcmdline)
{
std::cerr << " -> ";
const auto *info = find_app_info(pid);
if (info) {
- strncpy(cmdline, info->appid, PROC_NAME_MAX - 1);
- cmdline[PROC_NAME_MAX - 1] = '\0';
+ strncpy(cmdline, info->appid, maxcmdline - 1);
+ cmdline[maxcmdline - 1] = '\0';
std::cerr << info->appid << std::endl;
return RESOURCED_ERROR_NONE;
}
struct proc_app_info *find_app_info(const pid_t pid);
int proc_get_mem_usage(pid_t, unsigned int *usage);
- int proc_get_cmdline(pid_t pid, char *cmdline);
+ int proc_get_cmdline(pid_t pid, char *cmdline, size_t maxcmdline);
int memcg_set_eventfd(const char *memcg, const char *event, char *value);
int add_fd_read_handler(int fd, fd_changed_cb callback,
/* mocking other module dependencies for lowmem-limit.c */
MOCK_LIMIT(int, proc_get_mem_usage, (pid_t pid, unsigned int *usage), (pid, usage))
-MOCK_LIMIT(int, proc_get_cmdline, (pid_t pid, char *cmdline), (pid, cmdline))
+MOCK_LIMIT(int, proc_get_cmdline, (pid_t pid, char *cmdline, size_t maxcmdline), (pid, cmdline, maxcmdline))
MOCK_LIMIT(proc_app_info *, find_app_info, (const pid_t pid), (pid))
MOCK_LIMIT(int, exec_cmd, (int argc, const char *argv[]), (argc, argv))