diff options
| author | Tom Zanussi <tom.zanussi@linux.intel.com> | 2019-04-18 10:18:51 -0500 | 
|---|---|---|
| committer | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2019-05-21 12:46:32 -0400 | 
| commit | c8d94a1878342fdffedaaf15201d951dfc147065 (patch) | |
| tree | a970fca16b97110bd648f998d4fb7aeb21a5994e | |
| parent | 55267c88c003a3648567beae7c90512d3e2ab15e (diff) | |
| download | blackbird-op-linux-c8d94a1878342fdffedaaf15201d951dfc147065.tar.gz blackbird-op-linux-c8d94a1878342fdffedaaf15201d951dfc147065.zip  | |
tracing: Check keys for variable references in expressions too
There's an existing check for variable references in keys, but it
doesn't go far enough.  It checks whether a key field is a variable
reference but doesn't check whether it's an expression containing
variable references, which can cause the same problems for callers.
Use the existing field_has_hist_vars() function rather than a direct
top-level flag check to catch all possible variable references.
Link: http://lkml.kernel.org/r/e8c3d3d53db5ca90ceea5a46e5413103a6902fc7.1555597045.git.tom.zanussi@linux.intel.com
Cc: stable@vger.kernel.org
Fixes: 067fe038e70f6 ("tracing: Add variable reference handling to hist triggers")
Reported-by: Vincent Bernat <vincent@bernat.ch>
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
| -rw-r--r-- | kernel/trace/trace_events_hist.c | 4 | 
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 06e7b9f66de6..2b76f9520bd0 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -59,7 +59,7 @@  	C(NO_CLOSING_PAREN,	"No closing paren found"),		\  	C(SUBSYS_NOT_FOUND,	"Missing subsystem"),			\  	C(INVALID_SUBSYS_EVENT,	"Invalid subsystem or event name"),	\ -	C(INVALID_REF_KEY,	"Using variable references as keys not supported"), \ +	C(INVALID_REF_KEY,	"Using variable references in keys not supported"), \  	C(VAR_NOT_FOUND,	"Couldn't find variable"),		\  	C(FIELD_NOT_FOUND,	"Couldn't find field"), @@ -4506,7 +4506,7 @@ static int create_key_field(struct hist_trigger_data *hist_data,  			goto out;  		} -		if (hist_field->flags & HIST_FIELD_FL_VAR_REF) { +		if (field_has_hist_vars(hist_field, 0))	{  			hist_err(tr, HIST_ERR_INVALID_REF_KEY, errpos(field_str));  			destroy_hist_field(hist_field, 0);  			ret = -EINVAL;  | 

