| From df62db5be2e5f070ecd1a5ece5945b590ee112e0 Mon Sep 17 00:00:00 2001 |
| From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> |
| Date: Wed, 19 Apr 2017 12:07:08 -0400 |
| Subject: tracing: Allocate the snapshot buffer before enabling probe |
| |
| From: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| |
| commit df62db5be2e5f070ecd1a5ece5945b590ee112e0 upstream. |
| |
| Currently the snapshot trigger enables the probe and then allocates the |
| snapshot. If the probe triggers before the allocation, it could cause the |
| snapshot to fail and turn tracing off. It's best to allocate the snapshot |
| buffer first, and then enable the trigger. If something goes wrong in the |
| enabling of the trigger, the snapshot buffer is still allocated, but it can |
| also be freed by the user by writting zero into the snapshot buffer file. |
| |
| Also add a check of the return status of alloc_snapshot(). |
| |
| Fixes: 77fd5c15e3 ("tracing: Add snapshot trigger to function probes") |
| Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/trace/trace.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/kernel/trace/trace.c |
| +++ b/kernel/trace/trace.c |
| @@ -6060,11 +6060,13 @@ ftrace_trace_snapshot_callback(struct ft |
| return ret; |
| |
| out_reg: |
| - ret = register_ftrace_function_probe(glob, ops, count); |
| + ret = alloc_snapshot(&global_trace); |
| + if (ret < 0) |
| + goto out; |
| |
| - if (ret >= 0) |
| - alloc_snapshot(&global_trace); |
| + ret = register_ftrace_function_probe(glob, ops, count); |
| |
| + out: |
| return ret < 0 ? ret : 0; |
| } |
| |