Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+21 -20
+2 -1
include/linux/ftrace.h
··· 396 396 size_t cnt, loff_t *ppos); 397 397 ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf, 398 398 size_t cnt, loff_t *ppos); 399 - loff_t ftrace_regex_lseek(struct file *file, loff_t offset, int whence); 400 399 int ftrace_regex_release(struct inode *inode, struct file *file); 401 400 402 401 void __init ··· 567 568 static inline int 568 569 ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; } 569 570 #endif /* CONFIG_DYNAMIC_FTRACE */ 571 + 572 + loff_t ftrace_filter_lseek(struct file *file, loff_t offset, int whence); 570 573 571 574 /* totally disable ftrace - can not re-enable after this */ 572 575 void ftrace_kill(void);
+18 -18
kernel/trace/ftrace.c
··· 1052 1052 1053 1053 static struct pid * const ftrace_swapper_pid = &init_struct_pid; 1054 1054 1055 + loff_t 1056 + ftrace_filter_lseek(struct file *file, loff_t offset, int whence) 1057 + { 1058 + loff_t ret; 1059 + 1060 + if (file->f_mode & FMODE_READ) 1061 + ret = seq_lseek(file, offset, whence); 1062 + else 1063 + file->f_pos = ret = 1; 1064 + 1065 + return ret; 1066 + } 1067 + 1055 1068 #ifdef CONFIG_DYNAMIC_FTRACE 1056 1069 1057 1070 #ifndef CONFIG_FTRACE_MCOUNT_RECORD ··· 2625 2612 * routine, you can use ftrace_filter_write() for the write 2626 2613 * routine if @flag has FTRACE_ITER_FILTER set, or 2627 2614 * ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set. 2628 - * ftrace_regex_lseek() should be used as the lseek routine, and 2615 + * ftrace_filter_lseek() should be used as the lseek routine, and 2629 2616 * release must call ftrace_regex_release(). 2630 2617 */ 2631 2618 int ··· 2707 2694 { 2708 2695 return ftrace_regex_open(&global_ops, FTRACE_ITER_NOTRACE, 2709 2696 inode, file); 2710 - } 2711 - 2712 - loff_t 2713 - ftrace_regex_lseek(struct file *file, loff_t offset, int whence) 2714 - { 2715 - loff_t ret; 2716 - 2717 - if (file->f_mode & FMODE_READ) 2718 - ret = seq_lseek(file, offset, whence); 2719 - else 2720 - file->f_pos = ret = 1; 2721 - 2722 - return ret; 2723 2697 } 2724 2698 2725 2699 static int ftrace_match(char *str, char *regex, int len, int type) ··· 3570 3570 .open = ftrace_filter_open, 3571 3571 .read = seq_read, 3572 3572 .write = ftrace_filter_write, 3573 - .llseek = ftrace_regex_lseek, 3573 + .llseek = ftrace_filter_lseek, 3574 3574 .release = ftrace_regex_release, 3575 3575 }; 3576 3576 ··· 3578 3578 .open = ftrace_notrace_open, 3579 3579 .read = seq_read, 3580 3580 .write = ftrace_notrace_write, 3581 - .llseek = ftrace_regex_lseek, 3581 + .llseek = ftrace_filter_lseek, 3582 3582 .release = ftrace_regex_release, 3583 3583 }; 3584 3584 ··· 3783 3783 .open = ftrace_graph_open, 3784 3784 .read = seq_read, 3785 3785 .write = ftrace_graph_write, 3786 + .llseek = ftrace_filter_lseek, 3786 3787 .release = ftrace_graph_release, 3787 - .llseek = seq_lseek, 3788 3788 }; 3789 3789 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 3790 3790 ··· 4439 4439 .open = ftrace_pid_open, 4440 4440 .write = ftrace_pid_write, 4441 4441 .read = seq_read, 4442 - .llseek = seq_lseek, 4442 + .llseek = ftrace_filter_lseek, 4443 4443 .release = ftrace_pid_release, 4444 4444 }; 4445 4445
+1 -1
kernel/trace/trace_stack.c
··· 322 322 .open = stack_trace_filter_open, 323 323 .read = seq_read, 324 324 .write = ftrace_filter_write, 325 - .llseek = ftrace_regex_lseek, 325 + .llseek = ftrace_filter_lseek, 326 326 .release = ftrace_regex_release, 327 327 }; 328 328