Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
trace_events_filter.c
Go to the documentation of this file.
1 /*
2  * trace_events_filter - generic event filtering
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  * Copyright (C) 2009 Tom Zanussi <[email protected]>
19  */
20 
21 #include <linux/module.h>
22 #include <linux/ctype.h>
23 #include <linux/mutex.h>
24 #include <linux/perf_event.h>
25 #include <linux/slab.h>
26 
27 #include "trace.h"
28 #include "trace_output.h"
29 
30 #define DEFAULT_SYS_FILTER_MESSAGE \
31  "### global filter ###\n" \
32  "# Use this to set filters for multiple events.\n" \
33  "# Only events with the given fields will be affected.\n" \
34  "# If no events are modified, an error message will be displayed here"
35 
37 {
49 };
50 
51 struct filter_op {
52  int id;
53  char *string;
55 };
56 
57 static struct filter_op filter_ops[] = {
58  { OP_OR, "||", 1 },
59  { OP_AND, "&&", 2 },
60  { OP_GLOB, "~", 4 },
61  { OP_NE, "!=", 4 },
62  { OP_EQ, "==", 4 },
63  { OP_LT, "<", 5 },
64  { OP_LE, "<=", 5 },
65  { OP_GT, ">", 5 },
66  { OP_GE, ">=", 5 },
67  { OP_NONE, "OP_NONE", 0 },
68  { OP_OPEN_PAREN, "(", 0 },
69 };
70 
71 enum {
85 };
86 
87 static char *err_text[] = {
88  "No error",
89  "Invalid operator",
90  "Unbalanced parens",
91  "Too many operands",
92  "Operand too long",
93  "Field not found",
94  "Illegal operation for field type",
95  "Illegal integer value",
96  "Couldn't find or set field in one of a subsystem's events",
97  "Too many terms in predicate expression",
98  "Missing field name and/or value",
99  "Meaningless filter expression",
100  "Only 'ip' field is supported for function trace",
101 };
102 
103 struct opstack_op {
104  int op;
105  struct list_head list;
106 };
107 
108 struct postfix_elt {
109  int op;
110  char *operand;
111  struct list_head list;
112 };
113 
115  struct filter_op *ops;
118  int lasterr;
120 
121  struct {
122  char *string;
123  unsigned int cnt;
124  unsigned int tail;
125  } infix;
126 
127  struct {
128  char string[MAX_FILTER_STR_VAL];
129  int pos;
130  unsigned int tail;
131  } operand;
132 };
133 
134 struct pred_stack {
135  struct filter_pred **preds;
136  int index;
137 };
138 
139 #define DEFINE_COMPARISON_PRED(type) \
140 static int filter_pred_##type(struct filter_pred *pred, void *event) \
141 { \
142  type *addr = (type *)(event + pred->offset); \
143  type val = (type)pred->val; \
144  int match = 0; \
145  \
146  switch (pred->op) { \
147  case OP_LT: \
148  match = (*addr < val); \
149  break; \
150  case OP_LE: \
151  match = (*addr <= val); \
152  break; \
153  case OP_GT: \
154  match = (*addr > val); \
155  break; \
156  case OP_GE: \
157  match = (*addr >= val); \
158  break; \
159  default: \
160  break; \
161  } \
162  \
163  return match; \
164 }
165 
166 #define DEFINE_EQUALITY_PRED(size) \
167 static int filter_pred_##size(struct filter_pred *pred, void *event) \
168 { \
169  u##size *addr = (u##size *)(event + pred->offset); \
170  u##size val = (u##size)pred->val; \
171  int match; \
172  \
173  match = (val == *addr) ^ pred->not; \
174  \
175  return match; \
176 }
177 
186 
191 
192 /* Filter predicate for fixed sized arrays of characters */
193 static int filter_pred_string(struct filter_pred *pred, void *event)
194 {
195  char *addr = (char *)(event + pred->offset);
196  int cmp, match;
197 
198  cmp = pred->regex.match(addr, &pred->regex, pred->regex.field_len);
199 
200  match = cmp ^ pred->not;
201 
202  return match;
203 }
204 
205 /* Filter predicate for char * pointers */
206 static int filter_pred_pchar(struct filter_pred *pred, void *event)
207 {
208  char **addr = (char **)(event + pred->offset);
209  int cmp, match;
210  int len = strlen(*addr) + 1; /* including tailing '\0' */
211 
212  cmp = pred->regex.match(*addr, &pred->regex, len);
213 
214  match = cmp ^ pred->not;
215 
216  return match;
217 }
218 
219 /*
220  * Filter predicate for dynamic sized arrays of characters.
221  * These are implemented through a list of strings at the end
222  * of the entry.
223  * Also each of these strings have a field in the entry which
224  * contains its offset from the beginning of the entry.
225  * We have then first to get this field, dereference it
226  * and add it to the address of the entry, and at last we have
227  * the address of the string.
228  */
229 static int filter_pred_strloc(struct filter_pred *pred, void *event)
230 {
231  u32 str_item = *(u32 *)(event + pred->offset);
232  int str_loc = str_item & 0xffff;
233  int str_len = str_item >> 16;
234  char *addr = (char *)(event + str_loc);
235  int cmp, match;
236 
237  cmp = pred->regex.match(addr, &pred->regex, str_len);
238 
239  match = cmp ^ pred->not;
240 
241  return match;
242 }
243 
244 static int filter_pred_none(struct filter_pred *pred, void *event)
245 {
246  return 0;
247 }
248 
249 /*
250  * regex_match_foo - Basic regex callbacks
251  *
252  * @str: the string to be searched
253  * @r: the regex structure containing the pattern string
254  * @len: the length of the string to be searched (including '\0')
255  *
256  * Note:
257  * - @str might not be NULL-terminated if it's of type DYN_STRING
258  * or STATIC_STRING
259  */
260 
261 static int regex_match_full(char *str, struct regex *r, int len)
262 {
263  if (strncmp(str, r->pattern, len) == 0)
264  return 1;
265  return 0;
266 }
267 
268 static int regex_match_front(char *str, struct regex *r, int len)
269 {
270  if (strncmp(str, r->pattern, r->len) == 0)
271  return 1;
272  return 0;
273 }
274 
275 static int regex_match_middle(char *str, struct regex *r, int len)
276 {
277  if (strnstr(str, r->pattern, len))
278  return 1;
279  return 0;
280 }
281 
282 static int regex_match_end(char *str, struct regex *r, int len)
283 {
284  int strlen = len - 1;
285 
286  if (strlen >= r->len &&
287  memcmp(str + strlen - r->len, r->pattern, r->len) == 0)
288  return 1;
289  return 0;
290 }
291 
309 enum regex_type filter_parse_regex(char *buff, int len, char **search, int *not)
310 {
311  int type = MATCH_FULL;
312  int i;
313 
314  if (buff[0] == '!') {
315  *not = 1;
316  buff++;
317  len--;
318  } else
319  *not = 0;
320 
321  *search = buff;
322 
323  for (i = 0; i < len; i++) {
324  if (buff[i] == '*') {
325  if (!i) {
326  *search = buff + 1;
327  type = MATCH_END_ONLY;
328  } else {
329  if (type == MATCH_END_ONLY)
330  type = MATCH_MIDDLE_ONLY;
331  else
332  type = MATCH_FRONT_ONLY;
333  buff[i] = 0;
334  break;
335  }
336  }
337  }
338 
339  return type;
340 }
341 
342 static void filter_build_regex(struct filter_pred *pred)
343 {
344  struct regex *r = &pred->regex;
345  char *search;
346  enum regex_type type = MATCH_FULL;
347  int not = 0;
348 
349  if (pred->op == OP_GLOB) {
350  type = filter_parse_regex(r->pattern, r->len, &search, &not);
351  r->len = strlen(search);
352  memmove(r->pattern, search, r->len+1);
353  }
354 
355  switch (type) {
356  case MATCH_FULL:
357  r->match = regex_match_full;
358  break;
359  case MATCH_FRONT_ONLY:
360  r->match = regex_match_front;
361  break;
362  case MATCH_MIDDLE_ONLY:
363  r->match = regex_match_middle;
364  break;
365  case MATCH_END_ONLY:
366  r->match = regex_match_end;
367  break;
368  }
369 
370  pred->not ^= not;
371 }
372 
373 enum move_type {
377 };
378 
379 static struct filter_pred *
380 get_pred_parent(struct filter_pred *pred, struct filter_pred *preds,
381  int index, enum move_type *move)
382 {
383  if (pred->parent & FILTER_PRED_IS_RIGHT)
384  *move = MOVE_UP_FROM_RIGHT;
385  else
386  *move = MOVE_UP_FROM_LEFT;
387  pred = &preds[pred->parent & ~FILTER_PRED_IS_RIGHT];
388 
389  return pred;
390 }
391 
396 };
397 
398 typedef int (*filter_pred_walkcb_t) (enum move_type move,
399  struct filter_pred *pred,
400  int *err, void *data);
401 
402 static int walk_pred_tree(struct filter_pred *preds,
403  struct filter_pred *root,
405 {
406  struct filter_pred *pred = root;
407  enum move_type move = MOVE_DOWN;
408  int done = 0;
409 
410  if (!preds)
411  return -EINVAL;
412 
413  do {
414  int err = 0, ret;
415 
416  ret = cb(move, pred, &err, data);
417  if (ret == WALK_PRED_ABORT)
418  return err;
419  if (ret == WALK_PRED_PARENT)
420  goto get_parent;
421 
422  switch (move) {
423  case MOVE_DOWN:
424  if (pred->left != FILTER_PRED_INVALID) {
425  pred = &preds[pred->left];
426  continue;
427  }
428  goto get_parent;
429  case MOVE_UP_FROM_LEFT:
430  pred = &preds[pred->right];
431  move = MOVE_DOWN;
432  continue;
433  case MOVE_UP_FROM_RIGHT:
434  get_parent:
435  if (pred == root)
436  break;
437  pred = get_pred_parent(pred, preds,
438  pred->parent,
439  &move);
440  continue;
441  }
442  done = 1;
443  } while (!done);
444 
445  /* We are fine. */
446  return 0;
447 }
448 
449 /*
450  * A series of AND or ORs where found together. Instead of
451  * climbing up and down the tree branches, an array of the
452  * ops were made in order of checks. We can just move across
453  * the array and short circuit if needed.
454  */
455 static int process_ops(struct filter_pred *preds,
456  struct filter_pred *op, void *rec)
457 {
458  struct filter_pred *pred;
459  int match = 0;
460  int type;
461  int i;
462 
463  /*
464  * Micro-optimization: We set type to true if op
465  * is an OR and false otherwise (AND). Then we
466  * just need to test if the match is equal to
467  * the type, and if it is, we can short circuit the
468  * rest of the checks:
469  *
470  * if ((match && op->op == OP_OR) ||
471  * (!match && op->op == OP_AND))
472  * return match;
473  */
474  type = op->op == OP_OR;
475 
476  for (i = 0; i < op->val; i++) {
477  pred = &preds[op->ops[i]];
478  if (!WARN_ON_ONCE(!pred->fn))
479  match = pred->fn(pred, rec);
480  if (!!match == type)
481  return match;
482  }
483  return match;
484 }
485 
488  int match;
489  void *rec;
490 };
491 
492 static int filter_match_preds_cb(enum move_type move, struct filter_pred *pred,
493  int *err, void *data)
494 {
495  struct filter_match_preds_data *d = data;
496 
497  *err = 0;
498  switch (move) {
499  case MOVE_DOWN:
500  /* only AND and OR have children */
501  if (pred->left != FILTER_PRED_INVALID) {
502  /* If ops is set, then it was folded. */
503  if (!pred->ops)
504  return WALK_PRED_DEFAULT;
505  /* We can treat folded ops as a leaf node */
506  d->match = process_ops(d->preds, pred, d->rec);
507  } else {
508  if (!WARN_ON_ONCE(!pred->fn))
509  d->match = pred->fn(pred, d->rec);
510  }
511 
512  return WALK_PRED_PARENT;
513  case MOVE_UP_FROM_LEFT:
514  /*
515  * Check for short circuits.
516  *
517  * Optimization: !!match == (pred->op == OP_OR)
518  * is the same as:
519  * if ((match && pred->op == OP_OR) ||
520  * (!match && pred->op == OP_AND))
521  */
522  if (!!d->match == (pred->op == OP_OR))
523  return WALK_PRED_PARENT;
524  break;
525  case MOVE_UP_FROM_RIGHT:
526  break;
527  }
528 
529  return WALK_PRED_DEFAULT;
530 }
531 
532 /* return 1 if event matches, 0 otherwise (discard) */
533 int filter_match_preds(struct event_filter *filter, void *rec)
534 {
535  struct filter_pred *preds;
536  struct filter_pred *root;
537  struct filter_match_preds_data data = {
538  /* match is currently meaningless */
539  .match = -1,
540  .rec = rec,
541  };
542  int n_preds, ret;
543 
544  /* no filter is considered a match */
545  if (!filter)
546  return 1;
547 
548  n_preds = filter->n_preds;
549  if (!n_preds)
550  return 1;
551 
552  /*
553  * n_preds, root and filter->preds are protect with preemption disabled.
554  */
555  root = rcu_dereference_sched(filter->root);
556  if (!root)
557  return 1;
558 
559  data.preds = preds = rcu_dereference_sched(filter->preds);
560  ret = walk_pred_tree(preds, root, filter_match_preds_cb, &data);
561  WARN_ON(ret);
562  return data.match;
563 }
565 
566 static void parse_error(struct filter_parse_state *ps, int err, int pos)
567 {
568  ps->lasterr = err;
569  ps->lasterr_pos = pos;
570 }
571 
572 static void remove_filter_string(struct event_filter *filter)
573 {
574  if (!filter)
575  return;
576 
577  kfree(filter->filter_string);
578  filter->filter_string = NULL;
579 }
580 
581 static int replace_filter_string(struct event_filter *filter,
582  char *filter_string)
583 {
584  kfree(filter->filter_string);
585  filter->filter_string = kstrdup(filter_string, GFP_KERNEL);
586  if (!filter->filter_string)
587  return -ENOMEM;
588 
589  return 0;
590 }
591 
592 static int append_filter_string(struct event_filter *filter,
593  char *string)
594 {
595  int newlen;
596  char *new_filter_string;
597 
598  BUG_ON(!filter->filter_string);
599  newlen = strlen(filter->filter_string) + strlen(string) + 1;
600  new_filter_string = kmalloc(newlen, GFP_KERNEL);
601  if (!new_filter_string)
602  return -ENOMEM;
603 
604  strcpy(new_filter_string, filter->filter_string);
605  strcat(new_filter_string, string);
606  kfree(filter->filter_string);
607  filter->filter_string = new_filter_string;
608 
609  return 0;
610 }
611 
612 static void append_filter_err(struct filter_parse_state *ps,
613  struct event_filter *filter)
614 {
615  int pos = ps->lasterr_pos;
616  char *buf, *pbuf;
617 
618  buf = (char *)__get_free_page(GFP_TEMPORARY);
619  if (!buf)
620  return;
621 
622  append_filter_string(filter, "\n");
623  memset(buf, ' ', PAGE_SIZE);
624  if (pos > PAGE_SIZE - 128)
625  pos = 0;
626  buf[pos] = '^';
627  pbuf = &buf[pos] + 1;
628 
629  sprintf(pbuf, "\nparse_error: %s\n", err_text[ps->lasterr]);
630  append_filter_string(filter, buf);
631  free_page((unsigned long) buf);
632 }
633 
634 void print_event_filter(struct ftrace_event_call *call, struct trace_seq *s)
635 {
636  struct event_filter *filter;
637 
639  filter = call->filter;
640  if (filter && filter->filter_string)
641  trace_seq_printf(s, "%s\n", filter->filter_string);
642  else
643  trace_seq_printf(s, "none\n");
645 }
646 
648  struct trace_seq *s)
649 {
650  struct event_filter *filter;
651 
653  filter = system->filter;
654  if (filter && filter->filter_string)
655  trace_seq_printf(s, "%s\n", filter->filter_string);
656  else
659 }
660 
661 static struct ftrace_event_field *
662 __find_event_field(struct list_head *head, char *name)
663 {
664  struct ftrace_event_field *field;
665 
666  list_for_each_entry(field, head, link) {
667  if (!strcmp(field->name, name))
668  return field;
669  }
670 
671  return NULL;
672 }
673 
674 static struct ftrace_event_field *
675 find_event_field(struct ftrace_event_call *call, char *name)
676 {
677  struct ftrace_event_field *field;
678  struct list_head *head;
679 
680  field = __find_event_field(&ftrace_common_fields, name);
681  if (field)
682  return field;
683 
684  head = trace_get_fields(call);
685  return __find_event_field(head, name);
686 }
687 
688 static int __alloc_pred_stack(struct pred_stack *stack, int n_preds)
689 {
690  stack->preds = kcalloc(n_preds + 1, sizeof(*stack->preds), GFP_KERNEL);
691  if (!stack->preds)
692  return -ENOMEM;
693  stack->index = n_preds;
694  return 0;
695 }
696 
697 static void __free_pred_stack(struct pred_stack *stack)
698 {
699  kfree(stack->preds);
700  stack->index = 0;
701 }
702 
703 static int __push_pred_stack(struct pred_stack *stack,
704  struct filter_pred *pred)
705 {
706  int index = stack->index;
707 
708  if (WARN_ON(index == 0))
709  return -ENOSPC;
710 
711  stack->preds[--index] = pred;
712  stack->index = index;
713  return 0;
714 }
715 
716 static struct filter_pred *
717 __pop_pred_stack(struct pred_stack *stack)
718 {
719  struct filter_pred *pred;
720  int index = stack->index;
721 
722  pred = stack->preds[index++];
723  if (!pred)
724  return NULL;
725 
726  stack->index = index;
727  return pred;
728 }
729 
730 static int filter_set_pred(struct event_filter *filter,
731  int idx,
732  struct pred_stack *stack,
733  struct filter_pred *src)
734 {
735  struct filter_pred *dest = &filter->preds[idx];
736  struct filter_pred *left;
737  struct filter_pred *right;
738 
739  *dest = *src;
740  dest->index = idx;
741 
742  if (dest->op == OP_OR || dest->op == OP_AND) {
743  right = __pop_pred_stack(stack);
744  left = __pop_pred_stack(stack);
745  if (!left || !right)
746  return -EINVAL;
747  /*
748  * If both children can be folded
749  * and they are the same op as this op or a leaf,
750  * then this op can be folded.
751  */
752  if (left->index & FILTER_PRED_FOLD &&
753  (left->op == dest->op ||
754  left->left == FILTER_PRED_INVALID) &&
755  right->index & FILTER_PRED_FOLD &&
756  (right->op == dest->op ||
757  right->left == FILTER_PRED_INVALID))
758  dest->index |= FILTER_PRED_FOLD;
759 
760  dest->left = left->index & ~FILTER_PRED_FOLD;
761  dest->right = right->index & ~FILTER_PRED_FOLD;
762  left->parent = dest->index & ~FILTER_PRED_FOLD;
763  right->parent = dest->index | FILTER_PRED_IS_RIGHT;
764  } else {
765  /*
766  * Make dest->left invalid to be used as a quick
767  * way to know this is a leaf node.
768  */
769  dest->left = FILTER_PRED_INVALID;
770 
771  /* All leafs allow folding the parent ops. */
772  dest->index |= FILTER_PRED_FOLD;
773  }
774 
775  return __push_pred_stack(stack, dest);
776 }
777 
778 static void __free_preds(struct event_filter *filter)
779 {
780  if (filter->preds) {
781  kfree(filter->preds);
782  filter->preds = NULL;
783  }
784  filter->a_preds = 0;
785  filter->n_preds = 0;
786 }
787 
788 static void filter_disable(struct ftrace_event_call *call)
789 {
790  call->flags &= ~TRACE_EVENT_FL_FILTERED;
791 }
792 
793 static void __free_filter(struct event_filter *filter)
794 {
795  if (!filter)
796  return;
797 
798  __free_preds(filter);
799  kfree(filter->filter_string);
800  kfree(filter);
801 }
802 
803 /*
804  * Called when destroying the ftrace_event_call.
805  * The call is being freed, so we do not need to worry about
806  * the call being currently used. This is for module code removing
807  * the tracepoints from within it.
808  */
810 {
811  __free_filter(call->filter);
812  call->filter = NULL;
813 }
814 
815 static struct event_filter *__alloc_filter(void)
816 {
817  struct event_filter *filter;
818 
819  filter = kzalloc(sizeof(*filter), GFP_KERNEL);
820  return filter;
821 }
822 
823 static int __alloc_preds(struct event_filter *filter, int n_preds)
824 {
825  struct filter_pred *pred;
826  int i;
827 
828  if (filter->preds)
829  __free_preds(filter);
830 
831  filter->preds = kcalloc(n_preds, sizeof(*filter->preds), GFP_KERNEL);
832 
833  if (!filter->preds)
834  return -ENOMEM;
835 
836  filter->a_preds = n_preds;
837  filter->n_preds = 0;
838 
839  for (i = 0; i < n_preds; i++) {
840  pred = &filter->preds[i];
841  pred->fn = filter_pred_none;
842  }
843 
844  return 0;
845 }
846 
847 static void filter_free_subsystem_preds(struct event_subsystem *system)
848 {
849  struct ftrace_event_call *call;
850 
851  list_for_each_entry(call, &ftrace_events, list) {
852  if (strcmp(call->class->system, system->name) != 0)
853  continue;
854 
855  filter_disable(call);
856  remove_filter_string(call->filter);
857  }
858 }
859 
860 static void filter_free_subsystem_filters(struct event_subsystem *system)
861 {
862  struct ftrace_event_call *call;
863 
864  list_for_each_entry(call, &ftrace_events, list) {
865  if (strcmp(call->class->system, system->name) != 0)
866  continue;
867  __free_filter(call->filter);
868  call->filter = NULL;
869  }
870 }
871 
872 static int filter_add_pred(struct filter_parse_state *ps,
873  struct event_filter *filter,
874  struct filter_pred *pred,
875  struct pred_stack *stack)
876 {
877  int err;
878 
879  if (WARN_ON(filter->n_preds == filter->a_preds)) {
880  parse_error(ps, FILT_ERR_TOO_MANY_PREDS, 0);
881  return -ENOSPC;
882  }
883 
884  err = filter_set_pred(filter, filter->n_preds, stack, pred);
885  if (err)
886  return err;
887 
888  filter->n_preds++;
889 
890  return 0;
891 }
892 
893 int filter_assign_type(const char *type)
894 {
895  if (strstr(type, "__data_loc") && strstr(type, "char"))
896  return FILTER_DYN_STRING;
897 
898  if (strchr(type, '[') && strstr(type, "char"))
899  return FILTER_STATIC_STRING;
900 
901  return FILTER_OTHER;
902 }
903 
904 static bool is_function_field(struct ftrace_event_field *field)
905 {
906  return field->filter_type == FILTER_TRACE_FN;
907 }
908 
909 static bool is_string_field(struct ftrace_event_field *field)
910 {
911  return field->filter_type == FILTER_DYN_STRING ||
912  field->filter_type == FILTER_STATIC_STRING ||
913  field->filter_type == FILTER_PTR_STRING;
914 }
915 
916 static int is_legal_op(struct ftrace_event_field *field, int op)
917 {
918  if (is_string_field(field) &&
919  (op != OP_EQ && op != OP_NE && op != OP_GLOB))
920  return 0;
921  if (!is_string_field(field) && op == OP_GLOB)
922  return 0;
923 
924  return 1;
925 }
926 
927 static filter_pred_fn_t select_comparison_fn(int op, int field_size,
928  int field_is_signed)
929 {
931 
932  switch (field_size) {
933  case 8:
934  if (op == OP_EQ || op == OP_NE)
935  fn = filter_pred_64;
936  else if (field_is_signed)
937  fn = filter_pred_s64;
938  else
939  fn = filter_pred_u64;
940  break;
941  case 4:
942  if (op == OP_EQ || op == OP_NE)
943  fn = filter_pred_32;
944  else if (field_is_signed)
945  fn = filter_pred_s32;
946  else
947  fn = filter_pred_u32;
948  break;
949  case 2:
950  if (op == OP_EQ || op == OP_NE)
951  fn = filter_pred_16;
952  else if (field_is_signed)
953  fn = filter_pred_s16;
954  else
955  fn = filter_pred_u16;
956  break;
957  case 1:
958  if (op == OP_EQ || op == OP_NE)
959  fn = filter_pred_8;
960  else if (field_is_signed)
961  fn = filter_pred_s8;
962  else
963  fn = filter_pred_u8;
964  break;
965  }
966 
967  return fn;
968 }
969 
970 static int init_pred(struct filter_parse_state *ps,
971  struct ftrace_event_field *field,
972  struct filter_pred *pred)
973 
974 {
975  filter_pred_fn_t fn = filter_pred_none;
976  unsigned long long val;
977  int ret;
978 
979  pred->offset = field->offset;
980 
981  if (!is_legal_op(field, pred->op)) {
982  parse_error(ps, FILT_ERR_ILLEGAL_FIELD_OP, 0);
983  return -EINVAL;
984  }
985 
986  if (is_string_field(field)) {
987  filter_build_regex(pred);
988 
989  if (field->filter_type == FILTER_STATIC_STRING) {
990  fn = filter_pred_string;
991  pred->regex.field_len = field->size;
992  } else if (field->filter_type == FILTER_DYN_STRING)
993  fn = filter_pred_strloc;
994  else
995  fn = filter_pred_pchar;
996  } else if (is_function_field(field)) {
997  if (strcmp(field->name, "ip")) {
998  parse_error(ps, FILT_ERR_IP_FIELD_ONLY, 0);
999  return -EINVAL;
1000  }
1001  } else {
1002  if (field->is_signed)
1003  ret = strict_strtoll(pred->regex.pattern, 0, &val);
1004  else
1005  ret = strict_strtoull(pred->regex.pattern, 0, &val);
1006  if (ret) {
1007  parse_error(ps, FILT_ERR_ILLEGAL_INTVAL, 0);
1008  return -EINVAL;
1009  }
1010  pred->val = val;
1011 
1012  fn = select_comparison_fn(pred->op, field->size,
1013  field->is_signed);
1014  if (!fn) {
1015  parse_error(ps, FILT_ERR_INVALID_OP, 0);
1016  return -EINVAL;
1017  }
1018  }
1019 
1020  if (pred->op == OP_NE)
1021  pred->not = 1;
1022 
1023  pred->fn = fn;
1024  return 0;
1025 }
1026 
1027 static void parse_init(struct filter_parse_state *ps,
1028  struct filter_op *ops,
1029  char *infix_string)
1030 {
1031  memset(ps, '\0', sizeof(*ps));
1032 
1033  ps->infix.string = infix_string;
1034  ps->infix.cnt = strlen(infix_string);
1035  ps->ops = ops;
1036 
1037  INIT_LIST_HEAD(&ps->opstack);
1038  INIT_LIST_HEAD(&ps->postfix);
1039 }
1040 
1041 static char infix_next(struct filter_parse_state *ps)
1042 {
1043  ps->infix.cnt--;
1044 
1045  return ps->infix.string[ps->infix.tail++];
1046 }
1047 
1048 static char infix_peek(struct filter_parse_state *ps)
1049 {
1050  if (ps->infix.tail == strlen(ps->infix.string))
1051  return 0;
1052 
1053  return ps->infix.string[ps->infix.tail];
1054 }
1055 
1056 static void infix_advance(struct filter_parse_state *ps)
1057 {
1058  ps->infix.cnt--;
1059  ps->infix.tail++;
1060 }
1061 
1062 static inline int is_precedence_lower(struct filter_parse_state *ps,
1063  int a, int b)
1064 {
1065  return ps->ops[a].precedence < ps->ops[b].precedence;
1066 }
1067 
1068 static inline int is_op_char(struct filter_parse_state *ps, char c)
1069 {
1070  int i;
1071 
1072  for (i = 0; strcmp(ps->ops[i].string, "OP_NONE"); i++) {
1073  if (ps->ops[i].string[0] == c)
1074  return 1;
1075  }
1076 
1077  return 0;
1078 }
1079 
1080 static int infix_get_op(struct filter_parse_state *ps, char firstc)
1081 {
1082  char nextc = infix_peek(ps);
1083  char opstr[3];
1084  int i;
1085 
1086  opstr[0] = firstc;
1087  opstr[1] = nextc;
1088  opstr[2] = '\0';
1089 
1090  for (i = 0; strcmp(ps->ops[i].string, "OP_NONE"); i++) {
1091  if (!strcmp(opstr, ps->ops[i].string)) {
1092  infix_advance(ps);
1093  return ps->ops[i].id;
1094  }
1095  }
1096 
1097  opstr[1] = '\0';
1098 
1099  for (i = 0; strcmp(ps->ops[i].string, "OP_NONE"); i++) {
1100  if (!strcmp(opstr, ps->ops[i].string))
1101  return ps->ops[i].id;
1102  }
1103 
1104  return OP_NONE;
1105 }
1106 
1107 static inline void clear_operand_string(struct filter_parse_state *ps)
1108 {
1109  memset(ps->operand.string, '\0', MAX_FILTER_STR_VAL);
1110  ps->operand.tail = 0;
1111 }
1112 
1113 static inline int append_operand_char(struct filter_parse_state *ps, char c)
1114 {
1115  if (ps->operand.tail == MAX_FILTER_STR_VAL - 1)
1116  return -EINVAL;
1117 
1118  ps->operand.string[ps->operand.tail++] = c;
1119 
1120  return 0;
1121 }
1122 
1123 static int filter_opstack_push(struct filter_parse_state *ps, int op)
1124 {
1125  struct opstack_op *opstack_op;
1126 
1127  opstack_op = kmalloc(sizeof(*opstack_op), GFP_KERNEL);
1128  if (!opstack_op)
1129  return -ENOMEM;
1130 
1131  opstack_op->op = op;
1132  list_add(&opstack_op->list, &ps->opstack);
1133 
1134  return 0;
1135 }
1136 
1137 static int filter_opstack_empty(struct filter_parse_state *ps)
1138 {
1139  return list_empty(&ps->opstack);
1140 }
1141 
1142 static int filter_opstack_top(struct filter_parse_state *ps)
1143 {
1144  struct opstack_op *opstack_op;
1145 
1146  if (filter_opstack_empty(ps))
1147  return OP_NONE;
1148 
1149  opstack_op = list_first_entry(&ps->opstack, struct opstack_op, list);
1150 
1151  return opstack_op->op;
1152 }
1153 
1154 static int filter_opstack_pop(struct filter_parse_state *ps)
1155 {
1156  struct opstack_op *opstack_op;
1157  int op;
1158 
1159  if (filter_opstack_empty(ps))
1160  return OP_NONE;
1161 
1162  opstack_op = list_first_entry(&ps->opstack, struct opstack_op, list);
1163  op = opstack_op->op;
1164  list_del(&opstack_op->list);
1165 
1166  kfree(opstack_op);
1167 
1168  return op;
1169 }
1170 
1171 static void filter_opstack_clear(struct filter_parse_state *ps)
1172 {
1173  while (!filter_opstack_empty(ps))
1174  filter_opstack_pop(ps);
1175 }
1176 
1177 static char *curr_operand(struct filter_parse_state *ps)
1178 {
1179  return ps->operand.string;
1180 }
1181 
1182 static int postfix_append_operand(struct filter_parse_state *ps, char *operand)
1183 {
1184  struct postfix_elt *elt;
1185 
1186  elt = kmalloc(sizeof(*elt), GFP_KERNEL);
1187  if (!elt)
1188  return -ENOMEM;
1189 
1190  elt->op = OP_NONE;
1191  elt->operand = kstrdup(operand, GFP_KERNEL);
1192  if (!elt->operand) {
1193  kfree(elt);
1194  return -ENOMEM;
1195  }
1196 
1197  list_add_tail(&elt->list, &ps->postfix);
1198 
1199  return 0;
1200 }
1201 
1202 static int postfix_append_op(struct filter_parse_state *ps, int op)
1203 {
1204  struct postfix_elt *elt;
1205 
1206  elt = kmalloc(sizeof(*elt), GFP_KERNEL);
1207  if (!elt)
1208  return -ENOMEM;
1209 
1210  elt->op = op;
1211  elt->operand = NULL;
1212 
1213  list_add_tail(&elt->list, &ps->postfix);
1214 
1215  return 0;
1216 }
1217 
1218 static void postfix_clear(struct filter_parse_state *ps)
1219 {
1220  struct postfix_elt *elt;
1221 
1222  while (!list_empty(&ps->postfix)) {
1223  elt = list_first_entry(&ps->postfix, struct postfix_elt, list);
1224  list_del(&elt->list);
1225  kfree(elt->operand);
1226  kfree(elt);
1227  }
1228 }
1229 
1230 static int filter_parse(struct filter_parse_state *ps)
1231 {
1232  int in_string = 0;
1233  int op, top_op;
1234  char ch;
1235 
1236  while ((ch = infix_next(ps))) {
1237  if (ch == '"') {
1238  in_string ^= 1;
1239  continue;
1240  }
1241 
1242  if (in_string)
1243  goto parse_operand;
1244 
1245  if (isspace(ch))
1246  continue;
1247 
1248  if (is_op_char(ps, ch)) {
1249  op = infix_get_op(ps, ch);
1250  if (op == OP_NONE) {
1251  parse_error(ps, FILT_ERR_INVALID_OP, 0);
1252  return -EINVAL;
1253  }
1254 
1255  if (strlen(curr_operand(ps))) {
1256  postfix_append_operand(ps, curr_operand(ps));
1257  clear_operand_string(ps);
1258  }
1259 
1260  while (!filter_opstack_empty(ps)) {
1261  top_op = filter_opstack_top(ps);
1262  if (!is_precedence_lower(ps, top_op, op)) {
1263  top_op = filter_opstack_pop(ps);
1264  postfix_append_op(ps, top_op);
1265  continue;
1266  }
1267  break;
1268  }
1269 
1270  filter_opstack_push(ps, op);
1271  continue;
1272  }
1273 
1274  if (ch == '(') {
1275  filter_opstack_push(ps, OP_OPEN_PAREN);
1276  continue;
1277  }
1278 
1279  if (ch == ')') {
1280  if (strlen(curr_operand(ps))) {
1281  postfix_append_operand(ps, curr_operand(ps));
1282  clear_operand_string(ps);
1283  }
1284 
1285  top_op = filter_opstack_pop(ps);
1286  while (top_op != OP_NONE) {
1287  if (top_op == OP_OPEN_PAREN)
1288  break;
1289  postfix_append_op(ps, top_op);
1290  top_op = filter_opstack_pop(ps);
1291  }
1292  if (top_op == OP_NONE) {
1293  parse_error(ps, FILT_ERR_UNBALANCED_PAREN, 0);
1294  return -EINVAL;
1295  }
1296  continue;
1297  }
1298 parse_operand:
1299  if (append_operand_char(ps, ch)) {
1300  parse_error(ps, FILT_ERR_OPERAND_TOO_LONG, 0);
1301  return -EINVAL;
1302  }
1303  }
1304 
1305  if (strlen(curr_operand(ps)))
1306  postfix_append_operand(ps, curr_operand(ps));
1307 
1308  while (!filter_opstack_empty(ps)) {
1309  top_op = filter_opstack_pop(ps);
1310  if (top_op == OP_NONE)
1311  break;
1312  if (top_op == OP_OPEN_PAREN) {
1313  parse_error(ps, FILT_ERR_UNBALANCED_PAREN, 0);
1314  return -EINVAL;
1315  }
1316  postfix_append_op(ps, top_op);
1317  }
1318 
1319  return 0;
1320 }
1321 
1322 static struct filter_pred *create_pred(struct filter_parse_state *ps,
1323  struct ftrace_event_call *call,
1324  int op, char *operand1, char *operand2)
1325 {
1326  struct ftrace_event_field *field;
1327  static struct filter_pred pred;
1328 
1329  memset(&pred, 0, sizeof(pred));
1330  pred.op = op;
1331 
1332  if (op == OP_AND || op == OP_OR)
1333  return &pred;
1334 
1335  if (!operand1 || !operand2) {
1336  parse_error(ps, FILT_ERR_MISSING_FIELD, 0);
1337  return NULL;
1338  }
1339 
1340  field = find_event_field(call, operand1);
1341  if (!field) {
1342  parse_error(ps, FILT_ERR_FIELD_NOT_FOUND, 0);
1343  return NULL;
1344  }
1345 
1346  strcpy(pred.regex.pattern, operand2);
1347  pred.regex.len = strlen(pred.regex.pattern);
1348  pred.field = field;
1349  return init_pred(ps, field, &pred) ? NULL : &pred;
1350 }
1351 
1352 static int check_preds(struct filter_parse_state *ps)
1353 {
1354  int n_normal_preds = 0, n_logical_preds = 0;
1355  struct postfix_elt *elt;
1356 
1357  list_for_each_entry(elt, &ps->postfix, list) {
1358  if (elt->op == OP_NONE)
1359  continue;
1360 
1361  if (elt->op == OP_AND || elt->op == OP_OR) {
1362  n_logical_preds++;
1363  continue;
1364  }
1365  n_normal_preds++;
1366  }
1367 
1368  if (!n_normal_preds || n_logical_preds >= n_normal_preds) {
1369  parse_error(ps, FILT_ERR_INVALID_FILTER, 0);
1370  return -EINVAL;
1371  }
1372 
1373  return 0;
1374 }
1375 
1376 static int count_preds(struct filter_parse_state *ps)
1377 {
1378  struct postfix_elt *elt;
1379  int n_preds = 0;
1380 
1381  list_for_each_entry(elt, &ps->postfix, list) {
1382  if (elt->op == OP_NONE)
1383  continue;
1384  n_preds++;
1385  }
1386 
1387  return n_preds;
1388 }
1389 
1391  int count;
1392  int max;
1393 };
1394 
1395 static int check_pred_tree_cb(enum move_type move, struct filter_pred *pred,
1396  int *err, void *data)
1397 {
1398  struct check_pred_data *d = data;
1399 
1400  if (WARN_ON(d->count++ > d->max)) {
1401  *err = -EINVAL;
1402  return WALK_PRED_ABORT;
1403  }
1404  return WALK_PRED_DEFAULT;
1405 }
1406 
1407 /*
1408  * The tree is walked at filtering of an event. If the tree is not correctly
1409  * built, it may cause an infinite loop. Check here that the tree does
1410  * indeed terminate.
1411  */
1412 static int check_pred_tree(struct event_filter *filter,
1413  struct filter_pred *root)
1414 {
1415  struct check_pred_data data = {
1416  /*
1417  * The max that we can hit a node is three times.
1418  * Once going down, once coming up from left, and
1419  * once coming up from right. This is more than enough
1420  * since leafs are only hit a single time.
1421  */
1422  .max = 3 * filter->n_preds,
1423  .count = 0,
1424  };
1425 
1426  return walk_pred_tree(filter->preds, root,
1427  check_pred_tree_cb, &data);
1428 }
1429 
1430 static int count_leafs_cb(enum move_type move, struct filter_pred *pred,
1431  int *err, void *data)
1432 {
1433  int *count = data;
1434 
1435  if ((move == MOVE_DOWN) &&
1436  (pred->left == FILTER_PRED_INVALID))
1437  (*count)++;
1438 
1439  return WALK_PRED_DEFAULT;
1440 }
1441 
1442 static int count_leafs(struct filter_pred *preds, struct filter_pred *root)
1443 {
1444  int count = 0, ret;
1445 
1446  ret = walk_pred_tree(preds, root, count_leafs_cb, &count);
1447  WARN_ON(ret);
1448  return count;
1449 }
1450 
1453  int count;
1455 };
1456 
1457 static int fold_pred_cb(enum move_type move, struct filter_pred *pred,
1458  int *err, void *data)
1459 {
1460  struct fold_pred_data *d = data;
1461  struct filter_pred *root = d->root;
1462 
1463  if (move != MOVE_DOWN)
1464  return WALK_PRED_DEFAULT;
1465  if (pred->left != FILTER_PRED_INVALID)
1466  return WALK_PRED_DEFAULT;
1467 
1468  if (WARN_ON(d->count == d->children)) {
1469  *err = -EINVAL;
1470  return WALK_PRED_ABORT;
1471  }
1472 
1473  pred->index &= ~FILTER_PRED_FOLD;
1474  root->ops[d->count++] = pred->index;
1475  return WALK_PRED_DEFAULT;
1476 }
1477 
1478 static int fold_pred(struct filter_pred *preds, struct filter_pred *root)
1479 {
1480  struct fold_pred_data data = {
1481  .root = root,
1482  .count = 0,
1483  };
1484  int children;
1485 
1486  /* No need to keep the fold flag */
1487  root->index &= ~FILTER_PRED_FOLD;
1488 
1489  /* If the root is a leaf then do nothing */
1490  if (root->left == FILTER_PRED_INVALID)
1491  return 0;
1492 
1493  /* count the children */
1494  children = count_leafs(preds, &preds[root->left]);
1495  children += count_leafs(preds, &preds[root->right]);
1496 
1497  root->ops = kcalloc(children, sizeof(*root->ops), GFP_KERNEL);
1498  if (!root->ops)
1499  return -ENOMEM;
1500 
1501  root->val = children;
1502  data.children = children;
1503  return walk_pred_tree(preds, root, fold_pred_cb, &data);
1504 }
1505 
1506 static int fold_pred_tree_cb(enum move_type move, struct filter_pred *pred,
1507  int *err, void *data)
1508 {
1509  struct filter_pred *preds = data;
1510 
1511  if (move != MOVE_DOWN)
1512  return WALK_PRED_DEFAULT;
1513  if (!(pred->index & FILTER_PRED_FOLD))
1514  return WALK_PRED_DEFAULT;
1515 
1516  *err = fold_pred(preds, pred);
1517  if (*err)
1518  return WALK_PRED_ABORT;
1519 
1520  /* eveyrhing below is folded, continue with parent */
1521  return WALK_PRED_PARENT;
1522 }
1523 
1524 /*
1525  * To optimize the processing of the ops, if we have several "ors" or
1526  * "ands" together, we can put them in an array and process them all
1527  * together speeding up the filter logic.
1528  */
1529 static int fold_pred_tree(struct event_filter *filter,
1530  struct filter_pred *root)
1531 {
1532  return walk_pred_tree(filter->preds, root, fold_pred_tree_cb,
1533  filter->preds);
1534 }
1535 
1536 static int replace_preds(struct ftrace_event_call *call,
1537  struct event_filter *filter,
1538  struct filter_parse_state *ps,
1539  char *filter_string,
1540  bool dry_run)
1541 {
1542  char *operand1 = NULL, *operand2 = NULL;
1543  struct filter_pred *pred;
1544  struct filter_pred *root;
1545  struct postfix_elt *elt;
1546  struct pred_stack stack = { }; /* init to NULL */
1547  int err;
1548  int n_preds = 0;
1549 
1550  n_preds = count_preds(ps);
1551  if (n_preds >= MAX_FILTER_PRED) {
1552  parse_error(ps, FILT_ERR_TOO_MANY_PREDS, 0);
1553  return -ENOSPC;
1554  }
1555 
1556  err = check_preds(ps);
1557  if (err)
1558  return err;
1559 
1560  if (!dry_run) {
1561  err = __alloc_pred_stack(&stack, n_preds);
1562  if (err)
1563  return err;
1564  err = __alloc_preds(filter, n_preds);
1565  if (err)
1566  goto fail;
1567  }
1568 
1569  n_preds = 0;
1570  list_for_each_entry(elt, &ps->postfix, list) {
1571  if (elt->op == OP_NONE) {
1572  if (!operand1)
1573  operand1 = elt->operand;
1574  else if (!operand2)
1575  operand2 = elt->operand;
1576  else {
1577  parse_error(ps, FILT_ERR_TOO_MANY_OPERANDS, 0);
1578  err = -EINVAL;
1579  goto fail;
1580  }
1581  continue;
1582  }
1583 
1584  if (WARN_ON(n_preds++ == MAX_FILTER_PRED)) {
1585  parse_error(ps, FILT_ERR_TOO_MANY_PREDS, 0);
1586  err = -ENOSPC;
1587  goto fail;
1588  }
1589 
1590  pred = create_pred(ps, call, elt->op, operand1, operand2);
1591  if (!pred) {
1592  err = -EINVAL;
1593  goto fail;
1594  }
1595 
1596  if (!dry_run) {
1597  err = filter_add_pred(ps, filter, pred, &stack);
1598  if (err)
1599  goto fail;
1600  }
1601 
1602  operand1 = operand2 = NULL;
1603  }
1604 
1605  if (!dry_run) {
1606  /* We should have one item left on the stack */
1607  pred = __pop_pred_stack(&stack);
1608  if (!pred)
1609  return -EINVAL;
1610  /* This item is where we start from in matching */
1611  root = pred;
1612  /* Make sure the stack is empty */
1613  pred = __pop_pred_stack(&stack);
1614  if (WARN_ON(pred)) {
1615  err = -EINVAL;
1616  filter->root = NULL;
1617  goto fail;
1618  }
1619  err = check_pred_tree(filter, root);
1620  if (err)
1621  goto fail;
1622 
1623  /* Optimize the tree */
1624  err = fold_pred_tree(filter, root);
1625  if (err)
1626  goto fail;
1627 
1628  /* We don't set root until we know it works */
1629  barrier();
1630  filter->root = root;
1631  }
1632 
1633  err = 0;
1634 fail:
1635  __free_pred_stack(&stack);
1636  return err;
1637 }
1638 
1639 struct filter_list {
1640  struct list_head list;
1642 };
1643 
1644 static int replace_system_preds(struct event_subsystem *system,
1645  struct filter_parse_state *ps,
1646  char *filter_string)
1647 {
1648  struct ftrace_event_call *call;
1649  struct filter_list *filter_item;
1650  struct filter_list *tmp;
1652  bool fail = true;
1653  int err;
1654 
1656 
1657  if (strcmp(call->class->system, system->name) != 0)
1658  continue;
1659 
1660  /*
1661  * Try to see if the filter can be applied
1662  * (filter arg is ignored on dry_run)
1663  */
1664  err = replace_preds(call, NULL, ps, filter_string, true);
1665  if (err)
1667  else
1669  }
1670 
1671  list_for_each_entry(call, &ftrace_events, list) {
1672  struct event_filter *filter;
1673 
1674  if (strcmp(call->class->system, system->name) != 0)
1675  continue;
1676 
1677  if (call->flags & TRACE_EVENT_FL_NO_SET_FILTER)
1678  continue;
1679 
1680  filter_item = kzalloc(sizeof(*filter_item), GFP_KERNEL);
1681  if (!filter_item)
1682  goto fail_mem;
1683 
1684  list_add_tail(&filter_item->list, &filter_list);
1685 
1686  filter_item->filter = __alloc_filter();
1687  if (!filter_item->filter)
1688  goto fail_mem;
1689  filter = filter_item->filter;
1690 
1691  /* Can only fail on no memory */
1692  err = replace_filter_string(filter, filter_string);
1693  if (err)
1694  goto fail_mem;
1695 
1696  err = replace_preds(call, filter, ps, filter_string, false);
1697  if (err) {
1698  filter_disable(call);
1699  parse_error(ps, FILT_ERR_BAD_SUBSYS_FILTER, 0);
1700  append_filter_err(ps, filter);
1701  } else
1702  call->flags |= TRACE_EVENT_FL_FILTERED;
1703  /*
1704  * Regardless of if this returned an error, we still
1705  * replace the filter for the call.
1706  */
1707  filter = call->filter;
1708  rcu_assign_pointer(call->filter, filter_item->filter);
1709  filter_item->filter = filter;
1710 
1711  fail = false;
1712  }
1713 
1714  if (fail)
1715  goto fail;
1716 
1717  /*
1718  * The calls can still be using the old filters.
1719  * Do a synchronize_sched() to ensure all calls are
1720  * done with them before we free them.
1721  */
1723  list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
1724  __free_filter(filter_item->filter);
1725  list_del(&filter_item->list);
1726  kfree(filter_item);
1727  }
1728  return 0;
1729  fail:
1730  /* No call succeeded */
1731  list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
1732  list_del(&filter_item->list);
1733  kfree(filter_item);
1734  }
1735  parse_error(ps, FILT_ERR_BAD_SUBSYS_FILTER, 0);
1736  return -EINVAL;
1737  fail_mem:
1738  /* If any call succeeded, we still need to sync */
1739  if (!fail)
1741  list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
1742  __free_filter(filter_item->filter);
1743  list_del(&filter_item->list);
1744  kfree(filter_item);
1745  }
1746  return -ENOMEM;
1747 }
1748 
1749 static int create_filter_start(char *filter_str, bool set_str,
1750  struct filter_parse_state **psp,
1751  struct event_filter **filterp)
1752 {
1753  struct event_filter *filter;
1754  struct filter_parse_state *ps = NULL;
1755  int err = 0;
1756 
1757  WARN_ON_ONCE(*psp || *filterp);
1758 
1759  /* allocate everything, and if any fails, free all and fail */
1760  filter = __alloc_filter();
1761  if (filter && set_str)
1762  err = replace_filter_string(filter, filter_str);
1763 
1764  ps = kzalloc(sizeof(*ps), GFP_KERNEL);
1765 
1766  if (!filter || !ps || err) {
1767  kfree(ps);
1768  __free_filter(filter);
1769  return -ENOMEM;
1770  }
1771 
1772  /* we're committed to creating a new filter */
1773  *filterp = filter;
1774  *psp = ps;
1775 
1776  parse_init(ps, filter_ops, filter_str);
1777  err = filter_parse(ps);
1778  if (err && set_str)
1779  append_filter_err(ps, filter);
1780  return err;
1781 }
1782 
1783 static void create_filter_finish(struct filter_parse_state *ps)
1784 {
1785  if (ps) {
1786  filter_opstack_clear(ps);
1787  postfix_clear(ps);
1788  kfree(ps);
1789  }
1790 }
1791 
1808 static int create_filter(struct ftrace_event_call *call,
1809  char *filter_str, bool set_str,
1810  struct event_filter **filterp)
1811 {
1812  struct event_filter *filter = NULL;
1813  struct filter_parse_state *ps = NULL;
1814  int err;
1815 
1816  err = create_filter_start(filter_str, set_str, &ps, &filter);
1817  if (!err) {
1818  err = replace_preds(call, filter, ps, filter_str, false);
1819  if (err && set_str)
1820  append_filter_err(ps, filter);
1821  }
1822  create_filter_finish(ps);
1823 
1824  *filterp = filter;
1825  return err;
1826 }
1827 
1837 static int create_system_filter(struct event_subsystem *system,
1838  char *filter_str, struct event_filter **filterp)
1839 {
1840  struct event_filter *filter = NULL;
1841  struct filter_parse_state *ps = NULL;
1842  int err;
1843 
1844  err = create_filter_start(filter_str, true, &ps, &filter);
1845  if (!err) {
1846  err = replace_system_preds(system, ps, filter_str);
1847  if (!err) {
1848  /* System filters just show a default message */
1849  kfree(filter->filter_string);
1850  filter->filter_string = NULL;
1851  } else {
1852  append_filter_err(ps, filter);
1853  }
1854  }
1855  create_filter_finish(ps);
1856 
1857  *filterp = filter;
1858  return err;
1859 }
1860 
1861 int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
1862 {
1863  struct event_filter *filter;
1864  int err = 0;
1865 
1867 
1868  if (!strcmp(strstrip(filter_string), "0")) {
1869  filter_disable(call);
1870  filter = call->filter;
1871  if (!filter)
1872  goto out_unlock;
1873  RCU_INIT_POINTER(call->filter, NULL);
1874  /* Make sure the filter is not being used */
1876  __free_filter(filter);
1877  goto out_unlock;
1878  }
1879 
1880  err = create_filter(call, filter_string, true, &filter);
1881 
1882  /*
1883  * Always swap the call filter with the new filter
1884  * even if there was an error. If there was an error
1885  * in the filter, we disable the filter and show the error
1886  * string
1887  */
1888  if (filter) {
1889  struct event_filter *tmp = call->filter;
1890 
1891  if (!err)
1892  call->flags |= TRACE_EVENT_FL_FILTERED;
1893  else
1894  filter_disable(call);
1895 
1896  rcu_assign_pointer(call->filter, filter);
1897 
1898  if (tmp) {
1899  /* Make sure the call is done with the filter */
1901  __free_filter(tmp);
1902  }
1903  }
1904 out_unlock:
1906 
1907  return err;
1908 }
1909 
1911  char *filter_string)
1912 {
1913  struct event_filter *filter;
1914  int err = 0;
1915 
1917 
1918  /* Make sure the system still has events */
1919  if (!system->nr_events) {
1920  err = -ENODEV;
1921  goto out_unlock;
1922  }
1923 
1924  if (!strcmp(strstrip(filter_string), "0")) {
1925  filter_free_subsystem_preds(system);
1926  remove_filter_string(system->filter);
1927  filter = system->filter;
1928  system->filter = NULL;
1929  /* Ensure all filters are no longer used */
1931  filter_free_subsystem_filters(system);
1932  __free_filter(filter);
1933  goto out_unlock;
1934  }
1935 
1936  err = create_system_filter(system, filter_string, &filter);
1937  if (filter) {
1938  /*
1939  * No event actually uses the system filter
1940  * we can free it without synchronize_sched().
1941  */
1942  __free_filter(system->filter);
1943  system->filter = filter;
1944  }
1945 out_unlock:
1947 
1948  return err;
1949 }
1950 
1951 #ifdef CONFIG_PERF_EVENTS
1952 
1953 void ftrace_profile_free_filter(struct perf_event *event)
1954 {
1955  struct event_filter *filter = event->filter;
1956 
1957  event->filter = NULL;
1958  __free_filter(filter);
1959 }
1960 
1961 struct function_filter_data {
1962  struct ftrace_ops *ops;
1963  int first_filter;
1964  int first_notrace;
1965 };
1966 
1967 #ifdef CONFIG_FUNCTION_TRACER
1968 static char **
1969 ftrace_function_filter_re(char *buf, int len, int *count)
1970 {
1971  char *str, *sep, **re;
1972 
1973  str = kstrndup(buf, len, GFP_KERNEL);
1974  if (!str)
1975  return NULL;
1976 
1977  /*
1978  * The argv_split function takes white space
1979  * as a separator, so convert ',' into spaces.
1980  */
1981  while ((sep = strchr(str, ',')))
1982  *sep = ' ';
1983 
1984  re = argv_split(GFP_KERNEL, str, count);
1985  kfree(str);
1986  return re;
1987 }
1988 
1989 static int ftrace_function_set_regexp(struct ftrace_ops *ops, int filter,
1990  int reset, char *re, int len)
1991 {
1992  int ret;
1993 
1994  if (filter)
1995  ret = ftrace_set_filter(ops, re, len, reset);
1996  else
1997  ret = ftrace_set_notrace(ops, re, len, reset);
1998 
1999  return ret;
2000 }
2001 
2002 static int __ftrace_function_set_filter(int filter, char *buf, int len,
2003  struct function_filter_data *data)
2004 {
2005  int i, re_cnt, ret = -EINVAL;
2006  int *reset;
2007  char **re;
2008 
2009  reset = filter ? &data->first_filter : &data->first_notrace;
2010 
2011  /*
2012  * The 'ip' field could have multiple filters set, separated
2013  * either by space or comma. We first cut the filter and apply
2014  * all pieces separatelly.
2015  */
2016  re = ftrace_function_filter_re(buf, len, &re_cnt);
2017  if (!re)
2018  return -EINVAL;
2019 
2020  for (i = 0; i < re_cnt; i++) {
2021  ret = ftrace_function_set_regexp(data->ops, filter, *reset,
2022  re[i], strlen(re[i]));
2023  if (ret)
2024  break;
2025 
2026  if (*reset)
2027  *reset = 0;
2028  }
2029 
2030  argv_free(re);
2031  return ret;
2032 }
2033 
2034 static int ftrace_function_check_pred(struct filter_pred *pred, int leaf)
2035 {
2036  struct ftrace_event_field *field = pred->field;
2037 
2038  if (leaf) {
2039  /*
2040  * Check the leaf predicate for function trace, verify:
2041  * - only '==' and '!=' is used
2042  * - the 'ip' field is used
2043  */
2044  if ((pred->op != OP_EQ) && (pred->op != OP_NE))
2045  return -EINVAL;
2046 
2047  if (strcmp(field->name, "ip"))
2048  return -EINVAL;
2049  } else {
2050  /*
2051  * Check the non leaf predicate for function trace, verify:
2052  * - only '||' is used
2053  */
2054  if (pred->op != OP_OR)
2055  return -EINVAL;
2056  }
2057 
2058  return 0;
2059 }
2060 
2061 static int ftrace_function_set_filter_cb(enum move_type move,
2062  struct filter_pred *pred,
2063  int *err, void *data)
2064 {
2065  /* Checking the node is valid for function trace. */
2066  if ((move != MOVE_DOWN) ||
2067  (pred->left != FILTER_PRED_INVALID)) {
2068  *err = ftrace_function_check_pred(pred, 0);
2069  } else {
2070  *err = ftrace_function_check_pred(pred, 1);
2071  if (*err)
2072  return WALK_PRED_ABORT;
2073 
2074  *err = __ftrace_function_set_filter(pred->op == OP_EQ,
2075  pred->regex.pattern,
2076  pred->regex.len,
2077  data);
2078  }
2079 
2080  return (*err) ? WALK_PRED_ABORT : WALK_PRED_DEFAULT;
2081 }
2082 
2083 static int ftrace_function_set_filter(struct perf_event *event,
2084  struct event_filter *filter)
2085 {
2086  struct function_filter_data data = {
2087  .first_filter = 1,
2088  .first_notrace = 1,
2089  .ops = &event->ftrace_ops,
2090  };
2091 
2092  return walk_pred_tree(filter->preds, filter->root,
2093  ftrace_function_set_filter_cb, &data);
2094 }
2095 #else
2096 static int ftrace_function_set_filter(struct perf_event *event,
2097  struct event_filter *filter)
2098 {
2099  return -ENODEV;
2100 }
2101 #endif /* CONFIG_FUNCTION_TRACER */
2102 
2103 int ftrace_profile_set_filter(struct perf_event *event, int event_id,
2104  char *filter_str)
2105 {
2106  int err;
2107  struct event_filter *filter;
2108  struct ftrace_event_call *call;
2109 
2110  mutex_lock(&event_mutex);
2111 
2112  call = event->tp_event;
2113 
2114  err = -EINVAL;
2115  if (!call)
2116  goto out_unlock;
2117 
2118  err = -EEXIST;
2119  if (event->filter)
2120  goto out_unlock;
2121 
2122  err = create_filter(call, filter_str, false, &filter);
2123  if (err)
2124  goto free_filter;
2125 
2126  if (ftrace_event_is_function(call))
2127  err = ftrace_function_set_filter(event, filter);
2128  else
2129  event->filter = filter;
2130 
2131 free_filter:
2132  if (err || ftrace_event_is_function(call))
2133  __free_filter(filter);
2134 
2135 out_unlock:
2136  mutex_unlock(&event_mutex);
2137 
2138  return err;
2139 }
2140 
2141 #endif /* CONFIG_PERF_EVENTS */
2142 
2143 #ifdef CONFIG_FTRACE_STARTUP_TEST
2144 
2145 #include <linux/types.h>
2146 #include <linux/tracepoint.h>
2147 
2148 #define CREATE_TRACE_POINTS
2149 #include "trace_events_filter_test.h"
2150 
2151 #define DATA_REC(m, va, vb, vc, vd, ve, vf, vg, vh, nvisit) \
2152 { \
2153  .filter = FILTER, \
2154  .rec = { .a = va, .b = vb, .c = vc, .d = vd, \
2155  .e = ve, .f = vf, .g = vg, .h = vh }, \
2156  .match = m, \
2157  .not_visited = nvisit, \
2158 }
2159 #define YES 1
2160 #define NO 0
2161 
2162 static struct test_filter_data_t {
2163  char *filter;
2164  struct ftrace_raw_ftrace_test_filter rec;
2165  int match;
2166  char *not_visited;
2167 } test_filter_data[] = {
2168 #define FILTER "a == 1 && b == 1 && c == 1 && d == 1 && " \
2169  "e == 1 && f == 1 && g == 1 && h == 1"
2170  DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, ""),
2171  DATA_REC(NO, 0, 1, 1, 1, 1, 1, 1, 1, "bcdefgh"),
2172  DATA_REC(NO, 1, 1, 1, 1, 1, 1, 1, 0, ""),
2173 #undef FILTER
2174 #define FILTER "a == 1 || b == 1 || c == 1 || d == 1 || " \
2175  "e == 1 || f == 1 || g == 1 || h == 1"
2176  DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 0, ""),
2177  DATA_REC(YES, 0, 0, 0, 0, 0, 0, 0, 1, ""),
2178  DATA_REC(YES, 1, 0, 0, 0, 0, 0, 0, 0, "bcdefgh"),
2179 #undef FILTER
2180 #define FILTER "(a == 1 || b == 1) && (c == 1 || d == 1) && " \
2181  "(e == 1 || f == 1) && (g == 1 || h == 1)"
2182  DATA_REC(NO, 0, 0, 1, 1, 1, 1, 1, 1, "dfh"),
2183  DATA_REC(YES, 0, 1, 0, 1, 0, 1, 0, 1, ""),
2184  DATA_REC(YES, 1, 0, 1, 0, 0, 1, 0, 1, "bd"),
2185  DATA_REC(NO, 1, 0, 1, 0, 0, 1, 0, 0, "bd"),
2186 #undef FILTER
2187 #define FILTER "(a == 1 && b == 1) || (c == 1 && d == 1) || " \
2188  "(e == 1 && f == 1) || (g == 1 && h == 1)"
2189  DATA_REC(YES, 1, 0, 1, 1, 1, 1, 1, 1, "efgh"),
2190  DATA_REC(YES, 0, 0, 0, 0, 0, 0, 1, 1, ""),
2191  DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 1, ""),
2192 #undef FILTER
2193 #define FILTER "(a == 1 && b == 1) && (c == 1 && d == 1) && " \
2194  "(e == 1 && f == 1) || (g == 1 && h == 1)"
2195  DATA_REC(YES, 1, 1, 1, 1, 1, 1, 0, 0, "gh"),
2196  DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 1, ""),
2197  DATA_REC(YES, 1, 1, 1, 1, 1, 0, 1, 1, ""),
2198 #undef FILTER
2199 #define FILTER "((a == 1 || b == 1) || (c == 1 || d == 1) || " \
2200  "(e == 1 || f == 1)) && (g == 1 || h == 1)"
2201  DATA_REC(YES, 1, 1, 1, 1, 1, 1, 0, 1, "bcdef"),
2202  DATA_REC(NO, 0, 0, 0, 0, 0, 0, 0, 0, ""),
2203  DATA_REC(YES, 1, 1, 1, 1, 1, 0, 1, 1, "h"),
2204 #undef FILTER
2205 #define FILTER "((((((((a == 1) && (b == 1)) || (c == 1)) && (d == 1)) || " \
2206  "(e == 1)) && (f == 1)) || (g == 1)) && (h == 1))"
2207  DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, "ceg"),
2208  DATA_REC(NO, 0, 1, 0, 1, 0, 1, 0, 1, ""),
2209  DATA_REC(NO, 1, 0, 1, 0, 1, 0, 1, 0, ""),
2210 #undef FILTER
2211 #define FILTER "((((((((a == 1) || (b == 1)) && (c == 1)) || (d == 1)) && " \
2212  "(e == 1)) || (f == 1)) && (g == 1)) || (h == 1))"
2213  DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, "bdfh"),
2214  DATA_REC(YES, 0, 1, 0, 1, 0, 1, 0, 1, ""),
2215  DATA_REC(YES, 1, 0, 1, 0, 1, 0, 1, 0, "bdfh"),
2216 };
2217 
2218 #undef DATA_REC
2219 #undef FILTER
2220 #undef YES
2221 #undef NO
2222 
2223 #define DATA_CNT (sizeof(test_filter_data)/sizeof(struct test_filter_data_t))
2224 
2225 static int test_pred_visited;
2226 
2227 static int test_pred_visited_fn(struct filter_pred *pred, void *event)
2228 {
2229  struct ftrace_event_field *field = pred->field;
2230 
2231  test_pred_visited = 1;
2232  printk(KERN_INFO "\npred visited %s\n", field->name);
2233  return 1;
2234 }
2235 
2236 static int test_walk_pred_cb(enum move_type move, struct filter_pred *pred,
2237  int *err, void *data)
2238 {
2239  char *fields = data;
2240 
2241  if ((move == MOVE_DOWN) &&
2242  (pred->left == FILTER_PRED_INVALID)) {
2243  struct ftrace_event_field *field = pred->field;
2244 
2245  if (!field) {
2246  WARN(1, "all leafs should have field defined");
2247  return WALK_PRED_DEFAULT;
2248  }
2249  if (!strchr(fields, *field->name))
2250  return WALK_PRED_DEFAULT;
2251 
2252  WARN_ON(!pred->fn);
2253  pred->fn = test_pred_visited_fn;
2254  }
2255  return WALK_PRED_DEFAULT;
2256 }
2257 
2258 static __init int ftrace_test_event_filter(void)
2259 {
2260  int i;
2261 
2262  printk(KERN_INFO "Testing ftrace filter: ");
2263 
2264  for (i = 0; i < DATA_CNT; i++) {
2265  struct event_filter *filter = NULL;
2266  struct test_filter_data_t *d = &test_filter_data[i];
2267  int err;
2268 
2269  err = create_filter(&event_ftrace_test_filter, d->filter,
2270  false, &filter);
2271  if (err) {
2273  "Failed to get filter for '%s', err %d\n",
2274  d->filter, err);
2275  __free_filter(filter);
2276  break;
2277  }
2278 
2279  /*
2280  * The preemption disabling is not really needed for self
2281  * tests, but the rcu dereference will complain without it.
2282  */
2283  preempt_disable();
2284  if (*d->not_visited)
2285  walk_pred_tree(filter->preds, filter->root,
2286  test_walk_pred_cb,
2287  d->not_visited);
2288 
2289  test_pred_visited = 0;
2290  err = filter_match_preds(filter, &d->rec);
2291  preempt_enable();
2292 
2293  __free_filter(filter);
2294 
2295  if (test_pred_visited) {
2297  "Failed, unwanted pred visited for filter %s\n",
2298  d->filter);
2299  break;
2300  }
2301 
2302  if (err != d->match) {
2304  "Failed to match filter '%s', expected %d\n",
2305  d->filter, d->match);
2306  break;
2307  }
2308  }
2309 
2310  if (i == DATA_CNT)
2311  printk(KERN_CONT "OK\n");
2312 
2313  return 0;
2314 }
2315 
2316 late_initcall(ftrace_test_event_filter);
2317 
2318 #endif /* CONFIG_FTRACE_STARTUP_TEST */