summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-05-25 13:08:14 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-05-25 13:08:14 -0400
commita2c48d98fc0770f7993cf61c71659a99e1d2857e (patch)
tree2179ea82b5b16b74e3b4d5a18cf9e29d627033af /kernel
parent2409207a73cc8e4aff75ceccf6fe5c3ce4d391bc (diff)
parent4eebe38a37f9397ffecd4bd3afbdf36838a97969 (diff)
Merge tag 'trace-v5.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing fixes from Steven Rostedt: "Tom Zanussi sent me some small fixes and cleanups to the histogram code and I forgot to incorporate them. I also added a small clean up patch that was sent to me a while ago and I just noticed it" * tag 'trace-v5.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: kernel/trace/trace.h: Remove duplicate header of trace_seq.h tracing: Add a check_val() check before updating cond_snapshot() track_val tracing: Check keys for variable references in expressions too tracing: Prevent hist_field_var_ref() from accessing NULL tracing_map_elts
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/trace.h1
-rw-r--r--kernel/trace/trace_events_hist.c13
2 files changed, 11 insertions, 3 deletions
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 1974ce818ddb..82c70b63d375 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -15,7 +15,6 @@
15#include <linux/trace_seq.h> 15#include <linux/trace_seq.h>
16#include <linux/trace_events.h> 16#include <linux/trace_events.h>
17#include <linux/compiler.h> 17#include <linux/compiler.h>
18#include <linux/trace_seq.h>
19#include <linux/glob.h> 18#include <linux/glob.h>
20 19
21#ifdef CONFIG_FTRACE_SYSCALLS 20#ifdef CONFIG_FTRACE_SYSCALLS
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 7fca3457c705..ca6b0dff60c5 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -59,7 +59,7 @@
59 C(NO_CLOSING_PAREN, "No closing paren found"), \ 59 C(NO_CLOSING_PAREN, "No closing paren found"), \
60 C(SUBSYS_NOT_FOUND, "Missing subsystem"), \ 60 C(SUBSYS_NOT_FOUND, "Missing subsystem"), \
61 C(INVALID_SUBSYS_EVENT, "Invalid subsystem or event name"), \ 61 C(INVALID_SUBSYS_EVENT, "Invalid subsystem or event name"), \
62 C(INVALID_REF_KEY, "Using variable references as keys not supported"), \ 62 C(INVALID_REF_KEY, "Using variable references in keys not supported"), \
63 C(VAR_NOT_FOUND, "Couldn't find variable"), \ 63 C(VAR_NOT_FOUND, "Couldn't find variable"), \
64 C(FIELD_NOT_FOUND, "Couldn't find field"), 64 C(FIELD_NOT_FOUND, "Couldn't find field"),
65 65
@@ -1854,6 +1854,9 @@ static u64 hist_field_var_ref(struct hist_field *hist_field,
1854 struct hist_elt_data *elt_data; 1854 struct hist_elt_data *elt_data;
1855 u64 var_val = 0; 1855 u64 var_val = 0;
1856 1856
1857 if (WARN_ON_ONCE(!elt))
1858 return var_val;
1859
1857 elt_data = elt->private_data; 1860 elt_data = elt->private_data;
1858 var_val = elt_data->var_ref_vals[hist_field->var_ref_idx]; 1861 var_val = elt_data->var_ref_vals[hist_field->var_ref_idx];
1859 1862
@@ -3582,14 +3585,20 @@ static bool cond_snapshot_update(struct trace_array *tr, void *cond_data)
3582 struct track_data *track_data = tr->cond_snapshot->cond_data; 3585 struct track_data *track_data = tr->cond_snapshot->cond_data;
3583 struct hist_elt_data *elt_data, *track_elt_data; 3586 struct hist_elt_data *elt_data, *track_elt_data;
3584 struct snapshot_context *context = cond_data; 3587 struct snapshot_context *context = cond_data;
3588 struct action_data *action;
3585 u64 track_val; 3589 u64 track_val;
3586 3590
3587 if (!track_data) 3591 if (!track_data)
3588 return false; 3592 return false;
3589 3593
3594 action = track_data->action_data;
3595
3590 track_val = get_track_val(track_data->hist_data, context->elt, 3596 track_val = get_track_val(track_data->hist_data, context->elt,
3591 track_data->action_data); 3597 track_data->action_data);
3592 3598
3599 if (!action->track_data.check_val(track_data->track_val, track_val))
3600 return false;
3601
3593 track_data->track_val = track_val; 3602 track_data->track_val = track_val;
3594 memcpy(track_data->key, context->key, track_data->key_len); 3603 memcpy(track_data->key, context->key, track_data->key_len);
3595 3604
@@ -4503,7 +4512,7 @@ static int create_key_field(struct hist_trigger_data *hist_data,
4503 goto out; 4512 goto out;
4504 } 4513 }
4505 4514
4506 if (hist_field->flags & HIST_FIELD_FL_VAR_REF) { 4515 if (field_has_hist_vars(hist_field, 0)) {
4507 hist_err(tr, HIST_ERR_INVALID_REF_KEY, errpos(field_str)); 4516 hist_err(tr, HIST_ERR_INVALID_REF_KEY, errpos(field_str));
4508 destroy_hist_field(hist_field, 0); 4517 destroy_hist_field(hist_field, 0);
4509 ret = -EINVAL; 4518 ret = -EINVAL;