Commit 3c91930f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'trace-fixes-v3.9-rc-v3' of...

Merge tag 'trace-fixes-v3.9-rc-v3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull ftrace fixes from Steven Rostedt:
 "Namhyung Kim found and fixed a bug that can crash the kernel by simply
  doing: echo 1234 | tee -a /sys/kernel/debug/tracing/set_ftrace_pid

  Luckily, this can only be done by root, but still is a nasty bug."

* tag 'trace-fixes-v3.9-rc-v3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  ftrace: Move ftrace_filter_lseek out of CONFIG_DYNAMIC_FTRACE section
  tracing: Fix possible NULL pointer dereferences
parents 935d8aab 7f49ef69
...@@ -396,7 +396,6 @@ ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf, ...@@ -396,7 +396,6 @@ ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos); size_t cnt, loff_t *ppos);
ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf, ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf,
size_t cnt, loff_t *ppos); size_t cnt, loff_t *ppos);
loff_t ftrace_regex_lseek(struct file *file, loff_t offset, int whence);
int ftrace_regex_release(struct inode *inode, struct file *file); int ftrace_regex_release(struct inode *inode, struct file *file);
void __init void __init
...@@ -569,6 +568,8 @@ static inline int ...@@ -569,6 +568,8 @@ static inline int
ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; } ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; }
#endif /* CONFIG_DYNAMIC_FTRACE */ #endif /* CONFIG_DYNAMIC_FTRACE */
loff_t ftrace_filter_lseek(struct file *file, loff_t offset, int whence);
/* totally disable ftrace - can not re-enable after this */ /* totally disable ftrace - can not re-enable after this */
void ftrace_kill(void); void ftrace_kill(void);
......
...@@ -1052,6 +1052,19 @@ static __init void ftrace_profile_debugfs(struct dentry *d_tracer) ...@@ -1052,6 +1052,19 @@ static __init void ftrace_profile_debugfs(struct dentry *d_tracer)
static struct pid * const ftrace_swapper_pid = &init_struct_pid; static struct pid * const ftrace_swapper_pid = &init_struct_pid;
loff_t
ftrace_filter_lseek(struct file *file, loff_t offset, int whence)
{
loff_t ret;
if (file->f_mode & FMODE_READ)
ret = seq_lseek(file, offset, whence);
else
file->f_pos = ret = 1;
return ret;
}
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
#ifndef CONFIG_FTRACE_MCOUNT_RECORD #ifndef CONFIG_FTRACE_MCOUNT_RECORD
...@@ -2612,7 +2625,7 @@ static void ftrace_filter_reset(struct ftrace_hash *hash) ...@@ -2612,7 +2625,7 @@ static void ftrace_filter_reset(struct ftrace_hash *hash)
* routine, you can use ftrace_filter_write() for the write * routine, you can use ftrace_filter_write() for the write
* routine if @flag has FTRACE_ITER_FILTER set, or * routine if @flag has FTRACE_ITER_FILTER set, or
* ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set. * ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set.
* ftrace_regex_lseek() should be used as the lseek routine, and * ftrace_filter_lseek() should be used as the lseek routine, and
* release must call ftrace_regex_release(). * release must call ftrace_regex_release().
*/ */
int int
...@@ -2696,19 +2709,6 @@ ftrace_notrace_open(struct inode *inode, struct file *file) ...@@ -2696,19 +2709,6 @@ ftrace_notrace_open(struct inode *inode, struct file *file)
inode, file); inode, file);
} }
loff_t
ftrace_regex_lseek(struct file *file, loff_t offset, int whence)
{
loff_t ret;
if (file->f_mode & FMODE_READ)
ret = seq_lseek(file, offset, whence);
else
file->f_pos = ret = 1;
return ret;
}
static int ftrace_match(char *str, char *regex, int len, int type) static int ftrace_match(char *str, char *regex, int len, int type)
{ {
int matched = 0; int matched = 0;
...@@ -3570,7 +3570,7 @@ static const struct file_operations ftrace_filter_fops = { ...@@ -3570,7 +3570,7 @@ static const struct file_operations ftrace_filter_fops = {
.open = ftrace_filter_open, .open = ftrace_filter_open,
.read = seq_read, .read = seq_read,
.write = ftrace_filter_write, .write = ftrace_filter_write,
.llseek = ftrace_regex_lseek, .llseek = ftrace_filter_lseek,
.release = ftrace_regex_release, .release = ftrace_regex_release,
}; };
...@@ -3578,7 +3578,7 @@ static const struct file_operations ftrace_notrace_fops = { ...@@ -3578,7 +3578,7 @@ static const struct file_operations ftrace_notrace_fops = {
.open = ftrace_notrace_open, .open = ftrace_notrace_open,
.read = seq_read, .read = seq_read,
.write = ftrace_notrace_write, .write = ftrace_notrace_write,
.llseek = ftrace_regex_lseek, .llseek = ftrace_filter_lseek,
.release = ftrace_regex_release, .release = ftrace_regex_release,
}; };
...@@ -3783,8 +3783,8 @@ static const struct file_operations ftrace_graph_fops = { ...@@ -3783,8 +3783,8 @@ static const struct file_operations ftrace_graph_fops = {
.open = ftrace_graph_open, .open = ftrace_graph_open,
.read = seq_read, .read = seq_read,
.write = ftrace_graph_write, .write = ftrace_graph_write,
.llseek = ftrace_filter_lseek,
.release = ftrace_graph_release, .release = ftrace_graph_release,
.llseek = seq_lseek,
}; };
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
...@@ -4439,7 +4439,7 @@ static const struct file_operations ftrace_pid_fops = { ...@@ -4439,7 +4439,7 @@ static const struct file_operations ftrace_pid_fops = {
.open = ftrace_pid_open, .open = ftrace_pid_open,
.write = ftrace_pid_write, .write = ftrace_pid_write,
.read = seq_read, .read = seq_read,
.llseek = seq_lseek, .llseek = ftrace_filter_lseek,
.release = ftrace_pid_release, .release = ftrace_pid_release,
}; };
......
...@@ -322,7 +322,7 @@ static const struct file_operations stack_trace_filter_fops = { ...@@ -322,7 +322,7 @@ static const struct file_operations stack_trace_filter_fops = {
.open = stack_trace_filter_open, .open = stack_trace_filter_open,
.read = seq_read, .read = seq_read,
.write = ftrace_filter_write, .write = ftrace_filter_write,
.llseek = ftrace_regex_lseek, .llseek = ftrace_filter_lseek,
.release = ftrace_regex_release, .release = ftrace_regex_release,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment