Merge "lmkd: Fix string null termination in proc_get_size and proc_get_name"

This commit is contained in:
Suren Baghdasaryan 2019-10-07 22:53:49 +00:00 committed by Gerrit Code Review
commit d72d846754

View file

@ -782,15 +782,15 @@ static int proc_get_size(int pid) {
close(fd); close(fd);
return -1; return -1;
} }
line[ret] = '\0';
sscanf(line, "%d %d ", &total, &rss); sscanf(line, "%d %d ", &total, &rss);
close(fd); close(fd);
return rss; return rss;
} }
static char *proc_get_name(int pid) { static char *proc_get_name(int pid, char *buf, size_t buf_size) {
char path[PATH_MAX]; char path[PATH_MAX];
static char line[LINE_MAX];
int fd; int fd;
char *cp; char *cp;
ssize_t ret; ssize_t ret;
@ -801,25 +801,24 @@ static char *proc_get_name(int pid) {
if (fd == -1) { if (fd == -1) {
return NULL; return NULL;
} }
ret = read_all(fd, line, sizeof(line) - 1); ret = read_all(fd, buf, buf_size - 1);
close(fd); close(fd);
if (ret < 0) { if (ret < 0) {
return NULL; return NULL;
} }
buf[ret] = '\0';
cp = strchr(line, ' '); cp = strchr(buf, ' ');
if (cp) { if (cp) {
*cp = '\0'; *cp = '\0';
} else {
line[ret] = '\0';
} }
return line; return buf;
} }
static void cmd_procprio(LMKD_CTRL_PACKET packet) { static void cmd_procprio(LMKD_CTRL_PACKET packet) {
struct proc *procp; struct proc *procp;
char path[80]; char path[LINE_MAX];
char val[20]; char val[20];
int soft_limit_mult; int soft_limit_mult;
struct lmk_procprio params; struct lmk_procprio params;
@ -856,7 +855,8 @@ static void cmd_procprio(LMKD_CTRL_PACKET packet) {
} }
if (use_inkernel_interface) { if (use_inkernel_interface) {
stats_store_taskname(params.pid, proc_get_name(params.pid), kpoll_info.poll_fd); stats_store_taskname(params.pid, proc_get_name(params.pid, path, sizeof(path)),
kpoll_info.poll_fd);
return; return;
} }
@ -1660,6 +1660,7 @@ static int kill_one_process(struct proc* procp, int min_oom_score, int kill_reas
int r; int r;
int result = -1; int result = -1;
struct memory_stat *mem_st; struct memory_stat *mem_st;
char buf[LINE_MAX];
tgid = proc_get_tgid(pid); tgid = proc_get_tgid(pid);
if (tgid >= 0 && tgid != pid) { if (tgid >= 0 && tgid != pid) {
@ -1667,7 +1668,7 @@ static int kill_one_process(struct proc* procp, int min_oom_score, int kill_reas
goto out; goto out;
} }
taskname = proc_get_name(pid); taskname = proc_get_name(pid, buf, sizeof(buf));
if (!taskname) { if (!taskname) {
goto out; goto out;
} }