From: Steven Rostedt <[email protected]>
If a user were to use a glob expression with the "within" filter, it
currently just fails with an errno return but does not update the
error_log to tell the user why it failed. Update it to use the parsing
error log to tell the user why it failed.
# echo 'within ~ "*_read"' > events/kmem/kmem_cache_alloc/filter
-bash: echo: write error: Invalid argument
# cat error_log
[ 4676.606481] event filter parse error: error: 'within' filter cannot take
glob expressions
Command: within ~ "*_read"
^
Signed-off-by: Steven Rostedt <[email protected]>
---
kernel/trace/trace_events_filter.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/kernel/trace/trace_events_filter.c
b/kernel/trace/trace_events_filter.c
index 297bf156ea65..f811c527cce8 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -118,6 +118,7 @@ struct filter_pred {
C(IP_FIELD_ONLY, "Only 'ip' field is supported for function
trace"), \
C(INVALID_VALUE, "Invalid value (did you forget quotes)?"), \
C(NO_FUNCTION, "Function not found"), \
+ C(GLOB_WITHIN, "'within' filter cannot take glob
expressions"), \
C(ERRNO, "Error"), \
C(NO_FILTER, "No filter found")
@@ -2024,8 +2025,10 @@ static int parse_pred(const char *str, void *data,
} else if (field->filter_type == FILTER_WITHIN) {
unsigned long func;
- if (op == OP_GLOB)
+ if (op == OP_GLOB) {
+ parse_error(pe, FILT_ERR_GLOB_WITHIN, pos + i);
goto err_free;
+ }
pred->fn_num = FILTER_PRED_FN_WITHIN;
func = kallsyms_lookup_name(pred->regex->pattern);
--
2.53.0