mirror of https://gitee.com/openkylin/linux.git
ftrace: Have set_graph_functions handle write with RDWR
Since reading the set_graph_functions uses seq functions, which sets the file->private_data pointer to a seq_file descriptor. On writes the ftrace_graph_data descriptor is set to file->private_data. But if the file is opened for RDWR, the ftrace_graph_write() will incorrectly use the file->private_data descriptor instead of ((struct seq_file *)file->private_data)->private pointer, and this can crash the kernel. Acked-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
d4ad9a1cca
commit
ae98d27afc
|
@ -4842,6 +4842,12 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
|
||||||
if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX))
|
if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* Read mode uses seq functions */
|
||||||
|
if (file->f_mode & FMODE_READ) {
|
||||||
|
struct seq_file *m = file->private_data;
|
||||||
|
fgd = m->private;
|
||||||
|
}
|
||||||
|
|
||||||
read = trace_get_user(&parser, ubuf, cnt, ppos);
|
read = trace_get_user(&parser, ubuf, cnt, ppos);
|
||||||
|
|
||||||
if (read >= 0 && trace_parser_loaded((&parser))) {
|
if (read >= 0 && trace_parser_loaded((&parser))) {
|
||||||
|
|
Loading…
Reference in New Issue