diff options
Diffstat (limited to 'kernel/trace')
| -rw-r--r-- | kernel/trace/trace_events_filter.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c index 01c76eb3e168..8c62e5bdff09 100644 --- a/kernel/trace/trace_events_filter.c +++ b/kernel/trace/trace_events_filter.c | |||
| @@ -851,10 +851,19 @@ static void postfix_clear(struct filter_parse_state *ps) | |||
| 851 | 851 | ||
| 852 | static int filter_parse(struct filter_parse_state *ps) | 852 | static int filter_parse(struct filter_parse_state *ps) |
| 853 | { | 853 | { |
| 854 | int in_string = 0; | ||
| 854 | int op, top_op; | 855 | int op, top_op; |
| 855 | char ch; | 856 | char ch; |
| 856 | 857 | ||
| 857 | while ((ch = infix_next(ps))) { | 858 | while ((ch = infix_next(ps))) { |
| 859 | if (ch == '"') { | ||
| 860 | in_string ^= 1; | ||
| 861 | continue; | ||
| 862 | } | ||
| 863 | |||
| 864 | if (in_string) | ||
| 865 | goto parse_operand; | ||
| 866 | |||
| 858 | if (isspace(ch)) | 867 | if (isspace(ch)) |
| 859 | continue; | 868 | continue; |
| 860 | 869 | ||
| @@ -908,6 +917,7 @@ static int filter_parse(struct filter_parse_state *ps) | |||
| 908 | } | 917 | } |
| 909 | continue; | 918 | continue; |
| 910 | } | 919 | } |
| 920 | parse_operand: | ||
| 911 | if (append_operand_char(ps, ch)) { | 921 | if (append_operand_char(ps, ch)) { |
| 912 | parse_error(ps, FILT_ERR_OPERAND_TOO_LONG, 0); | 922 | parse_error(ps, FILT_ERR_OPERAND_TOO_LONG, 0); |
| 913 | return -EINVAL; | 923 | return -EINVAL; |
