latencytop: fix kernel panic while reading latency proc file
Reading /proc/<pid>/latency or /proc/<pid>/task/<tid>/latency could cause NULL pointer dereference. In lstats_open(), get_proc_task() can return NULL, in which case the kernel will oops at lstats_show_proc() because m->private is NULL. When get_proc_task() returns NULL, the kernel should return -ENOENT. This can be reproduced by the following script. while : do date bash -c 'ls > ls.$$' & pid=$! cat /proc/$pid/latency & cat /proc/$pid/latency & cat /proc/$pid/latency & cat /proc/$pid/latency done Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
2d07b255c7
Коммит
ae0027869d
|
@ -350,6 +350,8 @@ static int lstats_open(struct inode *inode, struct file *file)
|
||||||
struct seq_file *m;
|
struct seq_file *m;
|
||||||
struct task_struct *task = get_proc_task(inode);
|
struct task_struct *task = get_proc_task(inode);
|
||||||
|
|
||||||
|
if (!task)
|
||||||
|
return -ENOENT;
|
||||||
ret = single_open(file, lstats_show_proc, NULL);
|
ret = single_open(file, lstats_show_proc, NULL);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
m = file->private_data;
|
m = file->private_data;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче