cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

trace_events_filter.c (59505B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * trace_events_filter - generic event filtering
      4 *
      5 * Copyright (C) 2009 Tom Zanussi <tzanussi@gmail.com>
      6 */
      7
      8#include <linux/uaccess.h>
      9#include <linux/module.h>
     10#include <linux/ctype.h>
     11#include <linux/mutex.h>
     12#include <linux/perf_event.h>
     13#include <linux/slab.h>
     14
     15#include "trace.h"
     16#include "trace_output.h"
     17
     18#define DEFAULT_SYS_FILTER_MESSAGE					\
     19	"### global filter ###\n"					\
     20	"# Use this to set filters for multiple events.\n"		\
     21	"# Only events with the given fields will be affected.\n"	\
     22	"# If no events are modified, an error message will be displayed here"
     23
     24/* Due to token parsing '<=' must be before '<' and '>=' must be before '>' */
     25#define OPS					\
     26	C( OP_GLOB,	"~"  ),			\
     27	C( OP_NE,	"!=" ),			\
     28	C( OP_EQ,	"==" ),			\
     29	C( OP_LE,	"<=" ),			\
     30	C( OP_LT,	"<"  ),			\
     31	C( OP_GE,	">=" ),			\
     32	C( OP_GT,	">"  ),			\
     33	C( OP_BAND,	"&"  ),			\
     34	C( OP_MAX,	NULL )
     35
     36#undef C
     37#define C(a, b)	a
     38
     39enum filter_op_ids { OPS };
     40
     41#undef C
     42#define C(a, b)	b
     43
     44static const char * ops[] = { OPS };
     45
     46/*
     47 * pred functions are OP_LE, OP_LT, OP_GE, OP_GT, and OP_BAND
     48 * pred_funcs_##type below must match the order of them above.
     49 */
     50#define PRED_FUNC_START			OP_LE
     51#define PRED_FUNC_MAX			(OP_BAND - PRED_FUNC_START)
     52
     53#define ERRORS								\
     54	C(NONE,			"No error"),				\
     55	C(INVALID_OP,		"Invalid operator"),			\
     56	C(TOO_MANY_OPEN,	"Too many '('"),			\
     57	C(TOO_MANY_CLOSE,	"Too few '('"),				\
     58	C(MISSING_QUOTE,	"Missing matching quote"),		\
     59	C(OPERAND_TOO_LONG,	"Operand too long"),			\
     60	C(EXPECT_STRING,	"Expecting string field"),		\
     61	C(EXPECT_DIGIT,		"Expecting numeric field"),		\
     62	C(ILLEGAL_FIELD_OP,	"Illegal operation for field type"),	\
     63	C(FIELD_NOT_FOUND,	"Field not found"),			\
     64	C(ILLEGAL_INTVAL,	"Illegal integer value"),		\
     65	C(BAD_SUBSYS_FILTER,	"Couldn't find or set field in one of a subsystem's events"), \
     66	C(TOO_MANY_PREDS,	"Too many terms in predicate expression"), \
     67	C(INVALID_FILTER,	"Meaningless filter expression"),	\
     68	C(IP_FIELD_ONLY,	"Only 'ip' field is supported for function trace"), \
     69	C(INVALID_VALUE,	"Invalid value (did you forget quotes)?"), \
     70	C(ERRNO,		"Error"),				\
     71	C(NO_FILTER,		"No filter found")
     72
     73#undef C
     74#define C(a, b)		FILT_ERR_##a
     75
     76enum { ERRORS };
     77
     78#undef C
     79#define C(a, b)		b
     80
     81static const char *err_text[] = { ERRORS };
     82
     83/* Called after a '!' character but "!=" and "!~" are not "not"s */
     84static bool is_not(const char *str)
     85{
     86	switch (str[1]) {
     87	case '=':
     88	case '~':
     89		return false;
     90	}
     91	return true;
     92}
     93
     94/**
     95 * prog_entry - a singe entry in the filter program
     96 * @target:	     Index to jump to on a branch (actually one minus the index)
     97 * @when_to_branch:  The value of the result of the predicate to do a branch
     98 * @pred:	     The predicate to execute.
     99 */
    100struct prog_entry {
    101	int			target;
    102	int			when_to_branch;
    103	struct filter_pred	*pred;
    104};
    105
    106/**
    107 * update_preds- assign a program entry a label target
    108 * @prog: The program array
    109 * @N: The index of the current entry in @prog
    110 * @when_to_branch: What to assign a program entry for its branch condition
    111 *
    112 * The program entry at @N has a target that points to the index of a program
    113 * entry that can have its target and when_to_branch fields updated.
    114 * Update the current program entry denoted by index @N target field to be
    115 * that of the updated entry. This will denote the entry to update if
    116 * we are processing an "||" after an "&&"
    117 */
    118static void update_preds(struct prog_entry *prog, int N, int invert)
    119{
    120	int t, s;
    121
    122	t = prog[N].target;
    123	s = prog[t].target;
    124	prog[t].when_to_branch = invert;
    125	prog[t].target = N;
    126	prog[N].target = s;
    127}
    128
    129struct filter_parse_error {
    130	int lasterr;
    131	int lasterr_pos;
    132};
    133
    134static void parse_error(struct filter_parse_error *pe, int err, int pos)
    135{
    136	pe->lasterr = err;
    137	pe->lasterr_pos = pos;
    138}
    139
    140typedef int (*parse_pred_fn)(const char *str, void *data, int pos,
    141			     struct filter_parse_error *pe,
    142			     struct filter_pred **pred);
    143
    144enum {
    145	INVERT		= 1,
    146	PROCESS_AND	= 2,
    147	PROCESS_OR	= 4,
    148};
    149
    150/*
    151 * Without going into a formal proof, this explains the method that is used in
    152 * parsing the logical expressions.
    153 *
    154 * For example, if we have: "a && !(!b || (c && g)) || d || e && !f"
    155 * The first pass will convert it into the following program:
    156 *
    157 * n1: r=a;       l1: if (!r) goto l4;
    158 * n2: r=b;       l2: if (!r) goto l4;
    159 * n3: r=c; r=!r; l3: if (r) goto l4;
    160 * n4: r=g; r=!r; l4: if (r) goto l5;
    161 * n5: r=d;       l5: if (r) goto T
    162 * n6: r=e;       l6: if (!r) goto l7;
    163 * n7: r=f; r=!r; l7: if (!r) goto F
    164 * T: return TRUE
    165 * F: return FALSE
    166 *
    167 * To do this, we use a data structure to represent each of the above
    168 * predicate and conditions that has:
    169 *
    170 *  predicate, when_to_branch, invert, target
    171 *
    172 * The "predicate" will hold the function to determine the result "r".
    173 * The "when_to_branch" denotes what "r" should be if a branch is to be taken
    174 * "&&" would contain "!r" or (0) and "||" would contain "r" or (1).
    175 * The "invert" holds whether the value should be reversed before testing.
    176 * The "target" contains the label "l#" to jump to.
    177 *
    178 * A stack is created to hold values when parentheses are used.
    179 *
    180 * To simplify the logic, the labels will start at 0 and not 1.
    181 *
    182 * The possible invert values are 1 and 0. The number of "!"s that are in scope
    183 * before the predicate determines the invert value, if the number is odd then
    184 * the invert value is 1 and 0 otherwise. This means the invert value only
    185 * needs to be toggled when a new "!" is introduced compared to what is stored
    186 * on the stack, where parentheses were used.
    187 *
    188 * The top of the stack and "invert" are initialized to zero.
    189 *
    190 * ** FIRST PASS **
    191 *
    192 * #1 A loop through all the tokens is done:
    193 *
    194 * #2 If the token is an "(", the stack is push, and the current stack value
    195 *    gets the current invert value, and the loop continues to the next token.
    196 *    The top of the stack saves the "invert" value to keep track of what
    197 *    the current inversion is. As "!(a && !b || c)" would require all
    198 *    predicates being affected separately by the "!" before the parentheses.
    199 *    And that would end up being equivalent to "(!a || b) && !c"
    200 *
    201 * #3 If the token is an "!", the current "invert" value gets inverted, and
    202 *    the loop continues. Note, if the next token is a predicate, then
    203 *    this "invert" value is only valid for the current program entry,
    204 *    and does not affect other predicates later on.
    205 *
    206 * The only other acceptable token is the predicate string.
    207 *
    208 * #4 A new entry into the program is added saving: the predicate and the
    209 *    current value of "invert". The target is currently assigned to the
    210 *    previous program index (this will not be its final value).
    211 *
    212 * #5 We now enter another loop and look at the next token. The only valid
    213 *    tokens are ")", "&&", "||" or end of the input string "\0".
    214 *
    215 * #6 The invert variable is reset to the current value saved on the top of
    216 *    the stack.
    217 *
    218 * #7 The top of the stack holds not only the current invert value, but also
    219 *    if a "&&" or "||" needs to be processed. Note, the "&&" takes higher
    220 *    precedence than "||". That is "a && b || c && d" is equivalent to
    221 *    "(a && b) || (c && d)". Thus the first thing to do is to see if "&&" needs
    222 *    to be processed. This is the case if an "&&" was the last token. If it was
    223 *    then we call update_preds(). This takes the program, the current index in
    224 *    the program, and the current value of "invert".  More will be described
    225 *    below about this function.
    226 *
    227 * #8 If the next token is "&&" then we set a flag in the top of the stack
    228 *    that denotes that "&&" needs to be processed, break out of this loop
    229 *    and continue with the outer loop.
    230 *
    231 * #9 Otherwise, if a "||" needs to be processed then update_preds() is called.
    232 *    This is called with the program, the current index in the program, but
    233 *    this time with an inverted value of "invert" (that is !invert). This is
    234 *    because the value taken will become the "when_to_branch" value of the
    235 *    program.
    236 *    Note, this is called when the next token is not an "&&". As stated before,
    237 *    "&&" takes higher precedence, and "||" should not be processed yet if the
    238 *    next logical operation is "&&".
    239 *
    240 * #10 If the next token is "||" then we set a flag in the top of the stack
    241 *     that denotes that "||" needs to be processed, break out of this loop
    242 *     and continue with the outer loop.
    243 *
    244 * #11 If this is the end of the input string "\0" then we break out of both
    245 *     loops.
    246 *
    247 * #12 Otherwise, the next token is ")", where we pop the stack and continue
    248 *     this inner loop.
    249 *
    250 * Now to discuss the update_pred() function, as that is key to the setting up
    251 * of the program. Remember the "target" of the program is initialized to the
    252 * previous index and not the "l" label. The target holds the index into the
    253 * program that gets affected by the operand. Thus if we have something like
    254 *  "a || b && c", when we process "a" the target will be "-1" (undefined).
    255 * When we process "b", its target is "0", which is the index of "a", as that's
    256 * the predicate that is affected by "||". But because the next token after "b"
    257 * is "&&" we don't call update_preds(). Instead continue to "c". As the
    258 * next token after "c" is not "&&" but the end of input, we first process the
    259 * "&&" by calling update_preds() for the "&&" then we process the "||" by
    260 * calling updates_preds() with the values for processing "||".
    261 *
    262 * What does that mean? What update_preds() does is to first save the "target"
    263 * of the program entry indexed by the current program entry's "target"
    264 * (remember the "target" is initialized to previous program entry), and then
    265 * sets that "target" to the current index which represents the label "l#".
    266 * That entry's "when_to_branch" is set to the value passed in (the "invert"
    267 * or "!invert"). Then it sets the current program entry's target to the saved
    268 * "target" value (the old value of the program that had its "target" updated
    269 * to the label).
    270 *
    271 * Looking back at "a || b && c", we have the following steps:
    272 *  "a"  - prog[0] = { "a", X, -1 } // pred, when_to_branch, target
    273 *  "||" - flag that we need to process "||"; continue outer loop
    274 *  "b"  - prog[1] = { "b", X, 0 }
    275 *  "&&" - flag that we need to process "&&"; continue outer loop
    276 * (Notice we did not process "||")
    277 *  "c"  - prog[2] = { "c", X, 1 }
    278 *  update_preds(prog, 2, 0); // invert = 0 as we are processing "&&"
    279 *    t = prog[2].target; // t = 1
    280 *    s = prog[t].target; // s = 0
    281 *    prog[t].target = 2; // Set target to "l2"
    282 *    prog[t].when_to_branch = 0;
    283 *    prog[2].target = s;
    284 * update_preds(prog, 2, 1); // invert = 1 as we are now processing "||"
    285 *    t = prog[2].target; // t = 0
    286 *    s = prog[t].target; // s = -1
    287 *    prog[t].target = 2; // Set target to "l2"
    288 *    prog[t].when_to_branch = 1;
    289 *    prog[2].target = s;
    290 *
    291 * #13 Which brings us to the final step of the first pass, which is to set
    292 *     the last program entry's when_to_branch and target, which will be
    293 *     when_to_branch = 0; target = N; ( the label after the program entry after
    294 *     the last program entry processed above).
    295 *
    296 * If we denote "TRUE" to be the entry after the last program entry processed,
    297 * and "FALSE" the program entry after that, we are now done with the first
    298 * pass.
    299 *
    300 * Making the above "a || b && c" have a program of:
    301 *  prog[0] = { "a", 1, 2 }
    302 *  prog[1] = { "b", 0, 2 }
    303 *  prog[2] = { "c", 0, 3 }
    304 *
    305 * Which translates into:
    306 * n0: r = a; l0: if (r) goto l2;
    307 * n1: r = b; l1: if (!r) goto l2;
    308 * n2: r = c; l2: if (!r) goto l3;  // Which is the same as "goto F;"
    309 * T: return TRUE; l3:
    310 * F: return FALSE
    311 *
    312 * Although, after the first pass, the program is correct, it is
    313 * inefficient. The simple sample of "a || b && c" could be easily been
    314 * converted into:
    315 * n0: r = a; if (r) goto T
    316 * n1: r = b; if (!r) goto F
    317 * n2: r = c; if (!r) goto F
    318 * T: return TRUE;
    319 * F: return FALSE;
    320 *
    321 * The First Pass is over the input string. The next too passes are over
    322 * the program itself.
    323 *
    324 * ** SECOND PASS **
    325 *
    326 * Which brings us to the second pass. If a jump to a label has the
    327 * same condition as that label, it can instead jump to its target.
    328 * The original example of "a && !(!b || (c && g)) || d || e && !f"
    329 * where the first pass gives us:
    330 *
    331 * n1: r=a;       l1: if (!r) goto l4;
    332 * n2: r=b;       l2: if (!r) goto l4;
    333 * n3: r=c; r=!r; l3: if (r) goto l4;
    334 * n4: r=g; r=!r; l4: if (r) goto l5;
    335 * n5: r=d;       l5: if (r) goto T
    336 * n6: r=e;       l6: if (!r) goto l7;
    337 * n7: r=f; r=!r; l7: if (!r) goto F:
    338 * T: return TRUE;
    339 * F: return FALSE
    340 *
    341 * We can see that "l3: if (r) goto l4;" and at l4, we have "if (r) goto l5;".
    342 * And "l5: if (r) goto T", we could optimize this by converting l3 and l4
    343 * to go directly to T. To accomplish this, we start from the last
    344 * entry in the program and work our way back. If the target of the entry
    345 * has the same "when_to_branch" then we could use that entry's target.
    346 * Doing this, the above would end up as:
    347 *
    348 * n1: r=a;       l1: if (!r) goto l4;
    349 * n2: r=b;       l2: if (!r) goto l4;
    350 * n3: r=c; r=!r; l3: if (r) goto T;
    351 * n4: r=g; r=!r; l4: if (r) goto T;
    352 * n5: r=d;       l5: if (r) goto T;
    353 * n6: r=e;       l6: if (!r) goto F;
    354 * n7: r=f; r=!r; l7: if (!r) goto F;
    355 * T: return TRUE
    356 * F: return FALSE
    357 *
    358 * In that same pass, if the "when_to_branch" doesn't match, we can simply
    359 * go to the program entry after the label. That is, "l2: if (!r) goto l4;"
    360 * where "l4: if (r) goto T;", then we can convert l2 to be:
    361 * "l2: if (!r) goto n5;".
    362 *
    363 * This will have the second pass give us:
    364 * n1: r=a;       l1: if (!r) goto n5;
    365 * n2: r=b;       l2: if (!r) goto n5;
    366 * n3: r=c; r=!r; l3: if (r) goto T;
    367 * n4: r=g; r=!r; l4: if (r) goto T;
    368 * n5: r=d;       l5: if (r) goto T
    369 * n6: r=e;       l6: if (!r) goto F;
    370 * n7: r=f; r=!r; l7: if (!r) goto F
    371 * T: return TRUE
    372 * F: return FALSE
    373 *
    374 * Notice, all the "l#" labels are no longer used, and they can now
    375 * be discarded.
    376 *
    377 * ** THIRD PASS **
    378 *
    379 * For the third pass we deal with the inverts. As they simply just
    380 * make the "when_to_branch" get inverted, a simple loop over the
    381 * program to that does: "when_to_branch ^= invert;" will do the
    382 * job, leaving us with:
    383 * n1: r=a; if (!r) goto n5;
    384 * n2: r=b; if (!r) goto n5;
    385 * n3: r=c: if (!r) goto T;
    386 * n4: r=g; if (!r) goto T;
    387 * n5: r=d; if (r) goto T
    388 * n6: r=e; if (!r) goto F;
    389 * n7: r=f; if (r) goto F
    390 * T: return TRUE
    391 * F: return FALSE
    392 *
    393 * As "r = a; if (!r) goto n5;" is obviously the same as
    394 * "if (!a) goto n5;" without doing anything we can interpret the
    395 * program as:
    396 * n1: if (!a) goto n5;
    397 * n2: if (!b) goto n5;
    398 * n3: if (!c) goto T;
    399 * n4: if (!g) goto T;
    400 * n5: if (d) goto T
    401 * n6: if (!e) goto F;
    402 * n7: if (f) goto F
    403 * T: return TRUE
    404 * F: return FALSE
    405 *
    406 * Since the inverts are discarded at the end, there's no reason to store
    407 * them in the program array (and waste memory). A separate array to hold
    408 * the inverts is used and freed at the end.
    409 */
    410static struct prog_entry *
    411predicate_parse(const char *str, int nr_parens, int nr_preds,
    412		parse_pred_fn parse_pred, void *data,
    413		struct filter_parse_error *pe)
    414{
    415	struct prog_entry *prog_stack;
    416	struct prog_entry *prog;
    417	const char *ptr = str;
    418	char *inverts = NULL;
    419	int *op_stack;
    420	int *top;
    421	int invert = 0;
    422	int ret = -ENOMEM;
    423	int len;
    424	int N = 0;
    425	int i;
    426
    427	nr_preds += 2; /* For TRUE and FALSE */
    428
    429	op_stack = kmalloc_array(nr_parens, sizeof(*op_stack), GFP_KERNEL);
    430	if (!op_stack)
    431		return ERR_PTR(-ENOMEM);
    432	prog_stack = kcalloc(nr_preds, sizeof(*prog_stack), GFP_KERNEL);
    433	if (!prog_stack) {
    434		parse_error(pe, -ENOMEM, 0);
    435		goto out_free;
    436	}
    437	inverts = kmalloc_array(nr_preds, sizeof(*inverts), GFP_KERNEL);
    438	if (!inverts) {
    439		parse_error(pe, -ENOMEM, 0);
    440		goto out_free;
    441	}
    442
    443	top = op_stack;
    444	prog = prog_stack;
    445	*top = 0;
    446
    447	/* First pass */
    448	while (*ptr) {						/* #1 */
    449		const char *next = ptr++;
    450
    451		if (isspace(*next))
    452			continue;
    453
    454		switch (*next) {
    455		case '(':					/* #2 */
    456			if (top - op_stack > nr_parens) {
    457				ret = -EINVAL;
    458				goto out_free;
    459			}
    460			*(++top) = invert;
    461			continue;
    462		case '!':					/* #3 */
    463			if (!is_not(next))
    464				break;
    465			invert = !invert;
    466			continue;
    467		}
    468
    469		if (N >= nr_preds) {
    470			parse_error(pe, FILT_ERR_TOO_MANY_PREDS, next - str);
    471			goto out_free;
    472		}
    473
    474		inverts[N] = invert;				/* #4 */
    475		prog[N].target = N-1;
    476
    477		len = parse_pred(next, data, ptr - str, pe, &prog[N].pred);
    478		if (len < 0) {
    479			ret = len;
    480			goto out_free;
    481		}
    482		ptr = next + len;
    483
    484		N++;
    485
    486		ret = -1;
    487		while (1) {					/* #5 */
    488			next = ptr++;
    489			if (isspace(*next))
    490				continue;
    491
    492			switch (*next) {
    493			case ')':
    494			case '\0':
    495				break;
    496			case '&':
    497			case '|':
    498				/* accepting only "&&" or "||" */
    499				if (next[1] == next[0]) {
    500					ptr++;
    501					break;
    502				}
    503				fallthrough;
    504			default:
    505				parse_error(pe, FILT_ERR_TOO_MANY_PREDS,
    506					    next - str);
    507				goto out_free;
    508			}
    509
    510			invert = *top & INVERT;
    511
    512			if (*top & PROCESS_AND) {		/* #7 */
    513				update_preds(prog, N - 1, invert);
    514				*top &= ~PROCESS_AND;
    515			}
    516			if (*next == '&') {			/* #8 */
    517				*top |= PROCESS_AND;
    518				break;
    519			}
    520			if (*top & PROCESS_OR) {		/* #9 */
    521				update_preds(prog, N - 1, !invert);
    522				*top &= ~PROCESS_OR;
    523			}
    524			if (*next == '|') {			/* #10 */
    525				*top |= PROCESS_OR;
    526				break;
    527			}
    528			if (!*next)				/* #11 */
    529				goto out;
    530
    531			if (top == op_stack) {
    532				ret = -1;
    533				/* Too few '(' */
    534				parse_error(pe, FILT_ERR_TOO_MANY_CLOSE, ptr - str);
    535				goto out_free;
    536			}
    537			top--;					/* #12 */
    538		}
    539	}
    540 out:
    541	if (top != op_stack) {
    542		/* Too many '(' */
    543		parse_error(pe, FILT_ERR_TOO_MANY_OPEN, ptr - str);
    544		goto out_free;
    545	}
    546
    547	if (!N) {
    548		/* No program? */
    549		ret = -EINVAL;
    550		parse_error(pe, FILT_ERR_NO_FILTER, ptr - str);
    551		goto out_free;
    552	}
    553
    554	prog[N].pred = NULL;					/* #13 */
    555	prog[N].target = 1;		/* TRUE */
    556	prog[N+1].pred = NULL;
    557	prog[N+1].target = 0;		/* FALSE */
    558	prog[N-1].target = N;
    559	prog[N-1].when_to_branch = false;
    560
    561	/* Second Pass */
    562	for (i = N-1 ; i--; ) {
    563		int target = prog[i].target;
    564		if (prog[i].when_to_branch == prog[target].when_to_branch)
    565			prog[i].target = prog[target].target;
    566	}
    567
    568	/* Third Pass */
    569	for (i = 0; i < N; i++) {
    570		invert = inverts[i] ^ prog[i].when_to_branch;
    571		prog[i].when_to_branch = invert;
    572		/* Make sure the program always moves forward */
    573		if (WARN_ON(prog[i].target <= i)) {
    574			ret = -EINVAL;
    575			goto out_free;
    576		}
    577	}
    578
    579	kfree(op_stack);
    580	kfree(inverts);
    581	return prog;
    582out_free:
    583	kfree(op_stack);
    584	kfree(inverts);
    585	if (prog_stack) {
    586		for (i = 0; prog_stack[i].pred; i++)
    587			kfree(prog_stack[i].pred);
    588		kfree(prog_stack);
    589	}
    590	return ERR_PTR(ret);
    591}
    592
    593#define DEFINE_COMPARISON_PRED(type)					\
    594static int filter_pred_LT_##type(struct filter_pred *pred, void *event)	\
    595{									\
    596	type *addr = (type *)(event + pred->offset);			\
    597	type val = (type)pred->val;					\
    598	return *addr < val;						\
    599}									\
    600static int filter_pred_LE_##type(struct filter_pred *pred, void *event)	\
    601{									\
    602	type *addr = (type *)(event + pred->offset);			\
    603	type val = (type)pred->val;					\
    604	return *addr <= val;						\
    605}									\
    606static int filter_pred_GT_##type(struct filter_pred *pred, void *event)	\
    607{									\
    608	type *addr = (type *)(event + pred->offset);			\
    609	type val = (type)pred->val;					\
    610	return *addr > val;					\
    611}									\
    612static int filter_pred_GE_##type(struct filter_pred *pred, void *event)	\
    613{									\
    614	type *addr = (type *)(event + pred->offset);			\
    615	type val = (type)pred->val;					\
    616	return *addr >= val;						\
    617}									\
    618static int filter_pred_BAND_##type(struct filter_pred *pred, void *event) \
    619{									\
    620	type *addr = (type *)(event + pred->offset);			\
    621	type val = (type)pred->val;					\
    622	return !!(*addr & val);						\
    623}									\
    624static const filter_pred_fn_t pred_funcs_##type[] = {			\
    625	filter_pred_LE_##type,						\
    626	filter_pred_LT_##type,						\
    627	filter_pred_GE_##type,						\
    628	filter_pred_GT_##type,						\
    629	filter_pred_BAND_##type,					\
    630};
    631
    632#define DEFINE_EQUALITY_PRED(size)					\
    633static int filter_pred_##size(struct filter_pred *pred, void *event)	\
    634{									\
    635	u##size *addr = (u##size *)(event + pred->offset);		\
    636	u##size val = (u##size)pred->val;				\
    637	int match;							\
    638									\
    639	match = (val == *addr) ^ pred->not;				\
    640									\
    641	return match;							\
    642}
    643
    644DEFINE_COMPARISON_PRED(s64);
    645DEFINE_COMPARISON_PRED(u64);
    646DEFINE_COMPARISON_PRED(s32);
    647DEFINE_COMPARISON_PRED(u32);
    648DEFINE_COMPARISON_PRED(s16);
    649DEFINE_COMPARISON_PRED(u16);
    650DEFINE_COMPARISON_PRED(s8);
    651DEFINE_COMPARISON_PRED(u8);
    652
    653DEFINE_EQUALITY_PRED(64);
    654DEFINE_EQUALITY_PRED(32);
    655DEFINE_EQUALITY_PRED(16);
    656DEFINE_EQUALITY_PRED(8);
    657
    658/* user space strings temp buffer */
    659#define USTRING_BUF_SIZE	1024
    660
    661struct ustring_buffer {
    662	char		buffer[USTRING_BUF_SIZE];
    663};
    664
    665static __percpu struct ustring_buffer *ustring_per_cpu;
    666
    667static __always_inline char *test_string(char *str)
    668{
    669	struct ustring_buffer *ubuf;
    670	char *kstr;
    671
    672	if (!ustring_per_cpu)
    673		return NULL;
    674
    675	ubuf = this_cpu_ptr(ustring_per_cpu);
    676	kstr = ubuf->buffer;
    677
    678	/* For safety, do not trust the string pointer */
    679	if (!strncpy_from_kernel_nofault(kstr, str, USTRING_BUF_SIZE))
    680		return NULL;
    681	return kstr;
    682}
    683
    684static __always_inline char *test_ustring(char *str)
    685{
    686	struct ustring_buffer *ubuf;
    687	char __user *ustr;
    688	char *kstr;
    689
    690	if (!ustring_per_cpu)
    691		return NULL;
    692
    693	ubuf = this_cpu_ptr(ustring_per_cpu);
    694	kstr = ubuf->buffer;
    695
    696	/* user space address? */
    697	ustr = (char __user *)str;
    698	if (!strncpy_from_user_nofault(kstr, ustr, USTRING_BUF_SIZE))
    699		return NULL;
    700
    701	return kstr;
    702}
    703
    704/* Filter predicate for fixed sized arrays of characters */
    705static int filter_pred_string(struct filter_pred *pred, void *event)
    706{
    707	char *addr = (char *)(event + pred->offset);
    708	int cmp, match;
    709
    710	cmp = pred->regex.match(addr, &pred->regex, pred->regex.field_len);
    711
    712	match = cmp ^ pred->not;
    713
    714	return match;
    715}
    716
    717static __always_inline int filter_pchar(struct filter_pred *pred, char *str)
    718{
    719	int cmp, match;
    720	int len;
    721
    722	len = strlen(str) + 1;	/* including tailing '\0' */
    723	cmp = pred->regex.match(str, &pred->regex, len);
    724
    725	match = cmp ^ pred->not;
    726
    727	return match;
    728}
    729/* Filter predicate for char * pointers */
    730static int filter_pred_pchar(struct filter_pred *pred, void *event)
    731{
    732	char **addr = (char **)(event + pred->offset);
    733	char *str;
    734
    735	str = test_string(*addr);
    736	if (!str)
    737		return 0;
    738
    739	return filter_pchar(pred, str);
    740}
    741
    742/* Filter predicate for char * pointers in user space*/
    743static int filter_pred_pchar_user(struct filter_pred *pred, void *event)
    744{
    745	char **addr = (char **)(event + pred->offset);
    746	char *str;
    747
    748	str = test_ustring(*addr);
    749	if (!str)
    750		return 0;
    751
    752	return filter_pchar(pred, str);
    753}
    754
    755/*
    756 * Filter predicate for dynamic sized arrays of characters.
    757 * These are implemented through a list of strings at the end
    758 * of the entry.
    759 * Also each of these strings have a field in the entry which
    760 * contains its offset from the beginning of the entry.
    761 * We have then first to get this field, dereference it
    762 * and add it to the address of the entry, and at last we have
    763 * the address of the string.
    764 */
    765static int filter_pred_strloc(struct filter_pred *pred, void *event)
    766{
    767	u32 str_item = *(u32 *)(event + pred->offset);
    768	int str_loc = str_item & 0xffff;
    769	int str_len = str_item >> 16;
    770	char *addr = (char *)(event + str_loc);
    771	int cmp, match;
    772
    773	cmp = pred->regex.match(addr, &pred->regex, str_len);
    774
    775	match = cmp ^ pred->not;
    776
    777	return match;
    778}
    779
    780/*
    781 * Filter predicate for relative dynamic sized arrays of characters.
    782 * These are implemented through a list of strings at the end
    783 * of the entry as same as dynamic string.
    784 * The difference is that the relative one records the location offset
    785 * from the field itself, not the event entry.
    786 */
    787static int filter_pred_strrelloc(struct filter_pred *pred, void *event)
    788{
    789	u32 *item = (u32 *)(event + pred->offset);
    790	u32 str_item = *item;
    791	int str_loc = str_item & 0xffff;
    792	int str_len = str_item >> 16;
    793	char *addr = (char *)(&item[1]) + str_loc;
    794	int cmp, match;
    795
    796	cmp = pred->regex.match(addr, &pred->regex, str_len);
    797
    798	match = cmp ^ pred->not;
    799
    800	return match;
    801}
    802
    803/* Filter predicate for CPUs. */
    804static int filter_pred_cpu(struct filter_pred *pred, void *event)
    805{
    806	int cpu, cmp;
    807
    808	cpu = raw_smp_processor_id();
    809	cmp = pred->val;
    810
    811	switch (pred->op) {
    812	case OP_EQ:
    813		return cpu == cmp;
    814	case OP_NE:
    815		return cpu != cmp;
    816	case OP_LT:
    817		return cpu < cmp;
    818	case OP_LE:
    819		return cpu <= cmp;
    820	case OP_GT:
    821		return cpu > cmp;
    822	case OP_GE:
    823		return cpu >= cmp;
    824	default:
    825		return 0;
    826	}
    827}
    828
    829/* Filter predicate for COMM. */
    830static int filter_pred_comm(struct filter_pred *pred, void *event)
    831{
    832	int cmp;
    833
    834	cmp = pred->regex.match(current->comm, &pred->regex,
    835				TASK_COMM_LEN);
    836	return cmp ^ pred->not;
    837}
    838
    839static int filter_pred_none(struct filter_pred *pred, void *event)
    840{
    841	return 0;
    842}
    843
    844/*
    845 * regex_match_foo - Basic regex callbacks
    846 *
    847 * @str: the string to be searched
    848 * @r:   the regex structure containing the pattern string
    849 * @len: the length of the string to be searched (including '\0')
    850 *
    851 * Note:
    852 * - @str might not be NULL-terminated if it's of type DYN_STRING
    853 *   RDYN_STRING, or STATIC_STRING, unless @len is zero.
    854 */
    855
    856static int regex_match_full(char *str, struct regex *r, int len)
    857{
    858	/* len of zero means str is dynamic and ends with '\0' */
    859	if (!len)
    860		return strcmp(str, r->pattern) == 0;
    861
    862	return strncmp(str, r->pattern, len) == 0;
    863}
    864
    865static int regex_match_front(char *str, struct regex *r, int len)
    866{
    867	if (len && len < r->len)
    868		return 0;
    869
    870	return strncmp(str, r->pattern, r->len) == 0;
    871}
    872
    873static int regex_match_middle(char *str, struct regex *r, int len)
    874{
    875	if (!len)
    876		return strstr(str, r->pattern) != NULL;
    877
    878	return strnstr(str, r->pattern, len) != NULL;
    879}
    880
    881static int regex_match_end(char *str, struct regex *r, int len)
    882{
    883	int strlen = len - 1;
    884
    885	if (strlen >= r->len &&
    886	    memcmp(str + strlen - r->len, r->pattern, r->len) == 0)
    887		return 1;
    888	return 0;
    889}
    890
    891static int regex_match_glob(char *str, struct regex *r, int len __maybe_unused)
    892{
    893	if (glob_match(r->pattern, str))
    894		return 1;
    895	return 0;
    896}
    897
    898/**
    899 * filter_parse_regex - parse a basic regex
    900 * @buff:   the raw regex
    901 * @len:    length of the regex
    902 * @search: will point to the beginning of the string to compare
    903 * @not:    tell whether the match will have to be inverted
    904 *
    905 * This passes in a buffer containing a regex and this function will
    906 * set search to point to the search part of the buffer and
    907 * return the type of search it is (see enum above).
    908 * This does modify buff.
    909 *
    910 * Returns enum type.
    911 *  search returns the pointer to use for comparison.
    912 *  not returns 1 if buff started with a '!'
    913 *     0 otherwise.
    914 */
    915enum regex_type filter_parse_regex(char *buff, int len, char **search, int *not)
    916{
    917	int type = MATCH_FULL;
    918	int i;
    919
    920	if (buff[0] == '!') {
    921		*not = 1;
    922		buff++;
    923		len--;
    924	} else
    925		*not = 0;
    926
    927	*search = buff;
    928
    929	if (isdigit(buff[0]))
    930		return MATCH_INDEX;
    931
    932	for (i = 0; i < len; i++) {
    933		if (buff[i] == '*') {
    934			if (!i) {
    935				type = MATCH_END_ONLY;
    936			} else if (i == len - 1) {
    937				if (type == MATCH_END_ONLY)
    938					type = MATCH_MIDDLE_ONLY;
    939				else
    940					type = MATCH_FRONT_ONLY;
    941				buff[i] = 0;
    942				break;
    943			} else {	/* pattern continues, use full glob */
    944				return MATCH_GLOB;
    945			}
    946		} else if (strchr("[?\\", buff[i])) {
    947			return MATCH_GLOB;
    948		}
    949	}
    950	if (buff[0] == '*')
    951		*search = buff + 1;
    952
    953	return type;
    954}
    955
    956static void filter_build_regex(struct filter_pred *pred)
    957{
    958	struct regex *r = &pred->regex;
    959	char *search;
    960	enum regex_type type = MATCH_FULL;
    961
    962	if (pred->op == OP_GLOB) {
    963		type = filter_parse_regex(r->pattern, r->len, &search, &pred->not);
    964		r->len = strlen(search);
    965		memmove(r->pattern, search, r->len+1);
    966	}
    967
    968	switch (type) {
    969	/* MATCH_INDEX should not happen, but if it does, match full */
    970	case MATCH_INDEX:
    971	case MATCH_FULL:
    972		r->match = regex_match_full;
    973		break;
    974	case MATCH_FRONT_ONLY:
    975		r->match = regex_match_front;
    976		break;
    977	case MATCH_MIDDLE_ONLY:
    978		r->match = regex_match_middle;
    979		break;
    980	case MATCH_END_ONLY:
    981		r->match = regex_match_end;
    982		break;
    983	case MATCH_GLOB:
    984		r->match = regex_match_glob;
    985		break;
    986	}
    987}
    988
    989/* return 1 if event matches, 0 otherwise (discard) */
    990int filter_match_preds(struct event_filter *filter, void *rec)
    991{
    992	struct prog_entry *prog;
    993	int i;
    994
    995	/* no filter is considered a match */
    996	if (!filter)
    997		return 1;
    998
    999	/* Protected by either SRCU(tracepoint_srcu) or preempt_disable */
   1000	prog = rcu_dereference_raw(filter->prog);
   1001	if (!prog)
   1002		return 1;
   1003
   1004	for (i = 0; prog[i].pred; i++) {
   1005		struct filter_pred *pred = prog[i].pred;
   1006		int match = pred->fn(pred, rec);
   1007		if (match == prog[i].when_to_branch)
   1008			i = prog[i].target;
   1009	}
   1010	return prog[i].target;
   1011}
   1012EXPORT_SYMBOL_GPL(filter_match_preds);
   1013
   1014static void remove_filter_string(struct event_filter *filter)
   1015{
   1016	if (!filter)
   1017		return;
   1018
   1019	kfree(filter->filter_string);
   1020	filter->filter_string = NULL;
   1021}
   1022
   1023static void append_filter_err(struct trace_array *tr,
   1024			      struct filter_parse_error *pe,
   1025			      struct event_filter *filter)
   1026{
   1027	struct trace_seq *s;
   1028	int pos = pe->lasterr_pos;
   1029	char *buf;
   1030	int len;
   1031
   1032	if (WARN_ON(!filter->filter_string))
   1033		return;
   1034
   1035	s = kmalloc(sizeof(*s), GFP_KERNEL);
   1036	if (!s)
   1037		return;
   1038	trace_seq_init(s);
   1039
   1040	len = strlen(filter->filter_string);
   1041	if (pos > len)
   1042		pos = len;
   1043
   1044	/* indexing is off by one */
   1045	if (pos)
   1046		pos++;
   1047
   1048	trace_seq_puts(s, filter->filter_string);
   1049	if (pe->lasterr > 0) {
   1050		trace_seq_printf(s, "\n%*s", pos, "^");
   1051		trace_seq_printf(s, "\nparse_error: %s\n", err_text[pe->lasterr]);
   1052		tracing_log_err(tr, "event filter parse error",
   1053				filter->filter_string, err_text,
   1054				pe->lasterr, pe->lasterr_pos);
   1055	} else {
   1056		trace_seq_printf(s, "\nError: (%d)\n", pe->lasterr);
   1057		tracing_log_err(tr, "event filter parse error",
   1058				filter->filter_string, err_text,
   1059				FILT_ERR_ERRNO, 0);
   1060	}
   1061	trace_seq_putc(s, 0);
   1062	buf = kmemdup_nul(s->buffer, s->seq.len, GFP_KERNEL);
   1063	if (buf) {
   1064		kfree(filter->filter_string);
   1065		filter->filter_string = buf;
   1066	}
   1067	kfree(s);
   1068}
   1069
   1070static inline struct event_filter *event_filter(struct trace_event_file *file)
   1071{
   1072	return file->filter;
   1073}
   1074
   1075/* caller must hold event_mutex */
   1076void print_event_filter(struct trace_event_file *file, struct trace_seq *s)
   1077{
   1078	struct event_filter *filter = event_filter(file);
   1079
   1080	if (filter && filter->filter_string)
   1081		trace_seq_printf(s, "%s\n", filter->filter_string);
   1082	else
   1083		trace_seq_puts(s, "none\n");
   1084}
   1085
   1086void print_subsystem_event_filter(struct event_subsystem *system,
   1087				  struct trace_seq *s)
   1088{
   1089	struct event_filter *filter;
   1090
   1091	mutex_lock(&event_mutex);
   1092	filter = system->filter;
   1093	if (filter && filter->filter_string)
   1094		trace_seq_printf(s, "%s\n", filter->filter_string);
   1095	else
   1096		trace_seq_puts(s, DEFAULT_SYS_FILTER_MESSAGE "\n");
   1097	mutex_unlock(&event_mutex);
   1098}
   1099
   1100static void free_prog(struct event_filter *filter)
   1101{
   1102	struct prog_entry *prog;
   1103	int i;
   1104
   1105	prog = rcu_access_pointer(filter->prog);
   1106	if (!prog)
   1107		return;
   1108
   1109	for (i = 0; prog[i].pred; i++)
   1110		kfree(prog[i].pred);
   1111	kfree(prog);
   1112}
   1113
   1114static void filter_disable(struct trace_event_file *file)
   1115{
   1116	unsigned long old_flags = file->flags;
   1117
   1118	file->flags &= ~EVENT_FILE_FL_FILTERED;
   1119
   1120	if (old_flags != file->flags)
   1121		trace_buffered_event_disable();
   1122}
   1123
   1124static void __free_filter(struct event_filter *filter)
   1125{
   1126	if (!filter)
   1127		return;
   1128
   1129	free_prog(filter);
   1130	kfree(filter->filter_string);
   1131	kfree(filter);
   1132}
   1133
   1134void free_event_filter(struct event_filter *filter)
   1135{
   1136	__free_filter(filter);
   1137}
   1138
   1139static inline void __remove_filter(struct trace_event_file *file)
   1140{
   1141	filter_disable(file);
   1142	remove_filter_string(file->filter);
   1143}
   1144
   1145static void filter_free_subsystem_preds(struct trace_subsystem_dir *dir,
   1146					struct trace_array *tr)
   1147{
   1148	struct trace_event_file *file;
   1149
   1150	list_for_each_entry(file, &tr->events, list) {
   1151		if (file->system != dir)
   1152			continue;
   1153		__remove_filter(file);
   1154	}
   1155}
   1156
   1157static inline void __free_subsystem_filter(struct trace_event_file *file)
   1158{
   1159	__free_filter(file->filter);
   1160	file->filter = NULL;
   1161}
   1162
   1163static void filter_free_subsystem_filters(struct trace_subsystem_dir *dir,
   1164					  struct trace_array *tr)
   1165{
   1166	struct trace_event_file *file;
   1167
   1168	list_for_each_entry(file, &tr->events, list) {
   1169		if (file->system != dir)
   1170			continue;
   1171		__free_subsystem_filter(file);
   1172	}
   1173}
   1174
   1175int filter_assign_type(const char *type)
   1176{
   1177	if (strstr(type, "__data_loc") && strstr(type, "char"))
   1178		return FILTER_DYN_STRING;
   1179
   1180	if (strstr(type, "__rel_loc") && strstr(type, "char"))
   1181		return FILTER_RDYN_STRING;
   1182
   1183	if (strchr(type, '[') && strstr(type, "char"))
   1184		return FILTER_STATIC_STRING;
   1185
   1186	if (strcmp(type, "char *") == 0 || strcmp(type, "const char *") == 0)
   1187		return FILTER_PTR_STRING;
   1188
   1189	return FILTER_OTHER;
   1190}
   1191
   1192static filter_pred_fn_t select_comparison_fn(enum filter_op_ids op,
   1193					    int field_size, int field_is_signed)
   1194{
   1195	filter_pred_fn_t fn = NULL;
   1196	int pred_func_index = -1;
   1197
   1198	switch (op) {
   1199	case OP_EQ:
   1200	case OP_NE:
   1201		break;
   1202	default:
   1203		if (WARN_ON_ONCE(op < PRED_FUNC_START))
   1204			return NULL;
   1205		pred_func_index = op - PRED_FUNC_START;
   1206		if (WARN_ON_ONCE(pred_func_index > PRED_FUNC_MAX))
   1207			return NULL;
   1208	}
   1209
   1210	switch (field_size) {
   1211	case 8:
   1212		if (pred_func_index < 0)
   1213			fn = filter_pred_64;
   1214		else if (field_is_signed)
   1215			fn = pred_funcs_s64[pred_func_index];
   1216		else
   1217			fn = pred_funcs_u64[pred_func_index];
   1218		break;
   1219	case 4:
   1220		if (pred_func_index < 0)
   1221			fn = filter_pred_32;
   1222		else if (field_is_signed)
   1223			fn = pred_funcs_s32[pred_func_index];
   1224		else
   1225			fn = pred_funcs_u32[pred_func_index];
   1226		break;
   1227	case 2:
   1228		if (pred_func_index < 0)
   1229			fn = filter_pred_16;
   1230		else if (field_is_signed)
   1231			fn = pred_funcs_s16[pred_func_index];
   1232		else
   1233			fn = pred_funcs_u16[pred_func_index];
   1234		break;
   1235	case 1:
   1236		if (pred_func_index < 0)
   1237			fn = filter_pred_8;
   1238		else if (field_is_signed)
   1239			fn = pred_funcs_s8[pred_func_index];
   1240		else
   1241			fn = pred_funcs_u8[pred_func_index];
   1242		break;
   1243	}
   1244
   1245	return fn;
   1246}
   1247
   1248/* Called when a predicate is encountered by predicate_parse() */
   1249static int parse_pred(const char *str, void *data,
   1250		      int pos, struct filter_parse_error *pe,
   1251		      struct filter_pred **pred_ptr)
   1252{
   1253	struct trace_event_call *call = data;
   1254	struct ftrace_event_field *field;
   1255	struct filter_pred *pred = NULL;
   1256	char num_buf[24];	/* Big enough to hold an address */
   1257	char *field_name;
   1258	bool ustring = false;
   1259	char q;
   1260	u64 val;
   1261	int len;
   1262	int ret;
   1263	int op;
   1264	int s;
   1265	int i = 0;
   1266
   1267	/* First find the field to associate to */
   1268	while (isspace(str[i]))
   1269		i++;
   1270	s = i;
   1271
   1272	while (isalnum(str[i]) || str[i] == '_')
   1273		i++;
   1274
   1275	len = i - s;
   1276
   1277	if (!len)
   1278		return -1;
   1279
   1280	field_name = kmemdup_nul(str + s, len, GFP_KERNEL);
   1281	if (!field_name)
   1282		return -ENOMEM;
   1283
   1284	/* Make sure that the field exists */
   1285
   1286	field = trace_find_event_field(call, field_name);
   1287	kfree(field_name);
   1288	if (!field) {
   1289		parse_error(pe, FILT_ERR_FIELD_NOT_FOUND, pos + i);
   1290		return -EINVAL;
   1291	}
   1292
   1293	/* See if the field is a user space string */
   1294	if ((len = str_has_prefix(str + i, ".ustring"))) {
   1295		ustring = true;
   1296		i += len;
   1297	}
   1298
   1299	while (isspace(str[i]))
   1300		i++;
   1301
   1302	/* Make sure this op is supported */
   1303	for (op = 0; ops[op]; op++) {
   1304		/* This is why '<=' must come before '<' in ops[] */
   1305		if (strncmp(str + i, ops[op], strlen(ops[op])) == 0)
   1306			break;
   1307	}
   1308
   1309	if (!ops[op]) {
   1310		parse_error(pe, FILT_ERR_INVALID_OP, pos + i);
   1311		goto err_free;
   1312	}
   1313
   1314	i += strlen(ops[op]);
   1315
   1316	while (isspace(str[i]))
   1317		i++;
   1318
   1319	s = i;
   1320
   1321	pred = kzalloc(sizeof(*pred), GFP_KERNEL);
   1322	if (!pred)
   1323		return -ENOMEM;
   1324
   1325	pred->field = field;
   1326	pred->offset = field->offset;
   1327	pred->op = op;
   1328
   1329	if (ftrace_event_is_function(call)) {
   1330		/*
   1331		 * Perf does things different with function events.
   1332		 * It only allows an "ip" field, and expects a string.
   1333		 * But the string does not need to be surrounded by quotes.
   1334		 * If it is a string, the assigned function as a nop,
   1335		 * (perf doesn't use it) and grab everything.
   1336		 */
   1337		if (strcmp(field->name, "ip") != 0) {
   1338			parse_error(pe, FILT_ERR_IP_FIELD_ONLY, pos + i);
   1339			goto err_free;
   1340		}
   1341		pred->fn = filter_pred_none;
   1342
   1343		/*
   1344		 * Quotes are not required, but if they exist then we need
   1345		 * to read them till we hit a matching one.
   1346		 */
   1347		if (str[i] == '\'' || str[i] == '"')
   1348			q = str[i];
   1349		else
   1350			q = 0;
   1351
   1352		for (i++; str[i]; i++) {
   1353			if (q && str[i] == q)
   1354				break;
   1355			if (!q && (str[i] == ')' || str[i] == '&' ||
   1356				   str[i] == '|'))
   1357				break;
   1358		}
   1359		/* Skip quotes */
   1360		if (q)
   1361			s++;
   1362		len = i - s;
   1363		if (len >= MAX_FILTER_STR_VAL) {
   1364			parse_error(pe, FILT_ERR_OPERAND_TOO_LONG, pos + i);
   1365			goto err_free;
   1366		}
   1367
   1368		pred->regex.len = len;
   1369		strncpy(pred->regex.pattern, str + s, len);
   1370		pred->regex.pattern[len] = 0;
   1371
   1372	/* This is either a string, or an integer */
   1373	} else if (str[i] == '\'' || str[i] == '"') {
   1374		char q = str[i];
   1375
   1376		/* Make sure the op is OK for strings */
   1377		switch (op) {
   1378		case OP_NE:
   1379			pred->not = 1;
   1380			fallthrough;
   1381		case OP_GLOB:
   1382		case OP_EQ:
   1383			break;
   1384		default:
   1385			parse_error(pe, FILT_ERR_ILLEGAL_FIELD_OP, pos + i);
   1386			goto err_free;
   1387		}
   1388
   1389		/* Make sure the field is OK for strings */
   1390		if (!is_string_field(field)) {
   1391			parse_error(pe, FILT_ERR_EXPECT_DIGIT, pos + i);
   1392			goto err_free;
   1393		}
   1394
   1395		for (i++; str[i]; i++) {
   1396			if (str[i] == q)
   1397				break;
   1398		}
   1399		if (!str[i]) {
   1400			parse_error(pe, FILT_ERR_MISSING_QUOTE, pos + i);
   1401			goto err_free;
   1402		}
   1403
   1404		/* Skip quotes */
   1405		s++;
   1406		len = i - s;
   1407		if (len >= MAX_FILTER_STR_VAL) {
   1408			parse_error(pe, FILT_ERR_OPERAND_TOO_LONG, pos + i);
   1409			goto err_free;
   1410		}
   1411
   1412		pred->regex.len = len;
   1413		strncpy(pred->regex.pattern, str + s, len);
   1414		pred->regex.pattern[len] = 0;
   1415
   1416		filter_build_regex(pred);
   1417
   1418		if (field->filter_type == FILTER_COMM) {
   1419			pred->fn = filter_pred_comm;
   1420
   1421		} else if (field->filter_type == FILTER_STATIC_STRING) {
   1422			pred->fn = filter_pred_string;
   1423			pred->regex.field_len = field->size;
   1424
   1425		} else if (field->filter_type == FILTER_DYN_STRING) {
   1426			pred->fn = filter_pred_strloc;
   1427		} else if (field->filter_type == FILTER_RDYN_STRING)
   1428			pred->fn = filter_pred_strrelloc;
   1429		else {
   1430
   1431			if (!ustring_per_cpu) {
   1432				/* Once allocated, keep it around for good */
   1433				ustring_per_cpu = alloc_percpu(struct ustring_buffer);
   1434				if (!ustring_per_cpu)
   1435					goto err_mem;
   1436			}
   1437
   1438			if (ustring)
   1439				pred->fn = filter_pred_pchar_user;
   1440			else
   1441				pred->fn = filter_pred_pchar;
   1442		}
   1443		/* go past the last quote */
   1444		i++;
   1445
   1446	} else if (isdigit(str[i]) || str[i] == '-') {
   1447
   1448		/* Make sure the field is not a string */
   1449		if (is_string_field(field)) {
   1450			parse_error(pe, FILT_ERR_EXPECT_STRING, pos + i);
   1451			goto err_free;
   1452		}
   1453
   1454		if (op == OP_GLOB) {
   1455			parse_error(pe, FILT_ERR_ILLEGAL_FIELD_OP, pos + i);
   1456			goto err_free;
   1457		}
   1458
   1459		if (str[i] == '-')
   1460			i++;
   1461
   1462		/* We allow 0xDEADBEEF */
   1463		while (isalnum(str[i]))
   1464			i++;
   1465
   1466		len = i - s;
   1467		/* 0xfeedfacedeadbeef is 18 chars max */
   1468		if (len >= sizeof(num_buf)) {
   1469			parse_error(pe, FILT_ERR_OPERAND_TOO_LONG, pos + i);
   1470			goto err_free;
   1471		}
   1472
   1473		strncpy(num_buf, str + s, len);
   1474		num_buf[len] = 0;
   1475
   1476		/* Make sure it is a value */
   1477		if (field->is_signed)
   1478			ret = kstrtoll(num_buf, 0, &val);
   1479		else
   1480			ret = kstrtoull(num_buf, 0, &val);
   1481		if (ret) {
   1482			parse_error(pe, FILT_ERR_ILLEGAL_INTVAL, pos + s);
   1483			goto err_free;
   1484		}
   1485
   1486		pred->val = val;
   1487
   1488		if (field->filter_type == FILTER_CPU)
   1489			pred->fn = filter_pred_cpu;
   1490		else {
   1491			pred->fn = select_comparison_fn(pred->op, field->size,
   1492							field->is_signed);
   1493			if (pred->op == OP_NE)
   1494				pred->not = 1;
   1495		}
   1496
   1497	} else {
   1498		parse_error(pe, FILT_ERR_INVALID_VALUE, pos + i);
   1499		goto err_free;
   1500	}
   1501
   1502	*pred_ptr = pred;
   1503	return i;
   1504
   1505err_free:
   1506	kfree(pred);
   1507	return -EINVAL;
   1508err_mem:
   1509	kfree(pred);
   1510	return -ENOMEM;
   1511}
   1512
   1513enum {
   1514	TOO_MANY_CLOSE		= -1,
   1515	TOO_MANY_OPEN		= -2,
   1516	MISSING_QUOTE		= -3,
   1517};
   1518
   1519/*
   1520 * Read the filter string once to calculate the number of predicates
   1521 * as well as how deep the parentheses go.
   1522 *
   1523 * Returns:
   1524 *   0 - everything is fine (err is undefined)
   1525 *  -1 - too many ')'
   1526 *  -2 - too many '('
   1527 *  -3 - No matching quote
   1528 */
   1529static int calc_stack(const char *str, int *parens, int *preds, int *err)
   1530{
   1531	bool is_pred = false;
   1532	int nr_preds = 0;
   1533	int open = 1; /* Count the expression as "(E)" */
   1534	int last_quote = 0;
   1535	int max_open = 1;
   1536	int quote = 0;
   1537	int i;
   1538
   1539	*err = 0;
   1540
   1541	for (i = 0; str[i]; i++) {
   1542		if (isspace(str[i]))
   1543			continue;
   1544		if (quote) {
   1545			if (str[i] == quote)
   1546			       quote = 0;
   1547			continue;
   1548		}
   1549
   1550		switch (str[i]) {
   1551		case '\'':
   1552		case '"':
   1553			quote = str[i];
   1554			last_quote = i;
   1555			break;
   1556		case '|':
   1557		case '&':
   1558			if (str[i+1] != str[i])
   1559				break;
   1560			is_pred = false;
   1561			continue;
   1562		case '(':
   1563			is_pred = false;
   1564			open++;
   1565			if (open > max_open)
   1566				max_open = open;
   1567			continue;
   1568		case ')':
   1569			is_pred = false;
   1570			if (open == 1) {
   1571				*err = i;
   1572				return TOO_MANY_CLOSE;
   1573			}
   1574			open--;
   1575			continue;
   1576		}
   1577		if (!is_pred) {
   1578			nr_preds++;
   1579			is_pred = true;
   1580		}
   1581	}
   1582
   1583	if (quote) {
   1584		*err = last_quote;
   1585		return MISSING_QUOTE;
   1586	}
   1587
   1588	if (open != 1) {
   1589		int level = open;
   1590
   1591		/* find the bad open */
   1592		for (i--; i; i--) {
   1593			if (quote) {
   1594				if (str[i] == quote)
   1595					quote = 0;
   1596				continue;
   1597			}
   1598			switch (str[i]) {
   1599			case '(':
   1600				if (level == open) {
   1601					*err = i;
   1602					return TOO_MANY_OPEN;
   1603				}
   1604				level--;
   1605				break;
   1606			case ')':
   1607				level++;
   1608				break;
   1609			case '\'':
   1610			case '"':
   1611				quote = str[i];
   1612				break;
   1613			}
   1614		}
   1615		/* First character is the '(' with missing ')' */
   1616		*err = 0;
   1617		return TOO_MANY_OPEN;
   1618	}
   1619
   1620	/* Set the size of the required stacks */
   1621	*parens = max_open;
   1622	*preds = nr_preds;
   1623	return 0;
   1624}
   1625
   1626static int process_preds(struct trace_event_call *call,
   1627			 const char *filter_string,
   1628			 struct event_filter *filter,
   1629			 struct filter_parse_error *pe)
   1630{
   1631	struct prog_entry *prog;
   1632	int nr_parens;
   1633	int nr_preds;
   1634	int index;
   1635	int ret;
   1636
   1637	ret = calc_stack(filter_string, &nr_parens, &nr_preds, &index);
   1638	if (ret < 0) {
   1639		switch (ret) {
   1640		case MISSING_QUOTE:
   1641			parse_error(pe, FILT_ERR_MISSING_QUOTE, index);
   1642			break;
   1643		case TOO_MANY_OPEN:
   1644			parse_error(pe, FILT_ERR_TOO_MANY_OPEN, index);
   1645			break;
   1646		default:
   1647			parse_error(pe, FILT_ERR_TOO_MANY_CLOSE, index);
   1648		}
   1649		return ret;
   1650	}
   1651
   1652	if (!nr_preds)
   1653		return -EINVAL;
   1654
   1655	prog = predicate_parse(filter_string, nr_parens, nr_preds,
   1656			       parse_pred, call, pe);
   1657	if (IS_ERR(prog))
   1658		return PTR_ERR(prog);
   1659
   1660	rcu_assign_pointer(filter->prog, prog);
   1661	return 0;
   1662}
   1663
   1664static inline void event_set_filtered_flag(struct trace_event_file *file)
   1665{
   1666	unsigned long old_flags = file->flags;
   1667
   1668	file->flags |= EVENT_FILE_FL_FILTERED;
   1669
   1670	if (old_flags != file->flags)
   1671		trace_buffered_event_enable();
   1672}
   1673
   1674static inline void event_set_filter(struct trace_event_file *file,
   1675				    struct event_filter *filter)
   1676{
   1677	rcu_assign_pointer(file->filter, filter);
   1678}
   1679
   1680static inline void event_clear_filter(struct trace_event_file *file)
   1681{
   1682	RCU_INIT_POINTER(file->filter, NULL);
   1683}
   1684
   1685struct filter_list {
   1686	struct list_head	list;
   1687	struct event_filter	*filter;
   1688};
   1689
   1690static int process_system_preds(struct trace_subsystem_dir *dir,
   1691				struct trace_array *tr,
   1692				struct filter_parse_error *pe,
   1693				char *filter_string)
   1694{
   1695	struct trace_event_file *file;
   1696	struct filter_list *filter_item;
   1697	struct event_filter *filter = NULL;
   1698	struct filter_list *tmp;
   1699	LIST_HEAD(filter_list);
   1700	bool fail = true;
   1701	int err;
   1702
   1703	list_for_each_entry(file, &tr->events, list) {
   1704
   1705		if (file->system != dir)
   1706			continue;
   1707
   1708		filter = kzalloc(sizeof(*filter), GFP_KERNEL);
   1709		if (!filter)
   1710			goto fail_mem;
   1711
   1712		filter->filter_string = kstrdup(filter_string, GFP_KERNEL);
   1713		if (!filter->filter_string)
   1714			goto fail_mem;
   1715
   1716		err = process_preds(file->event_call, filter_string, filter, pe);
   1717		if (err) {
   1718			filter_disable(file);
   1719			parse_error(pe, FILT_ERR_BAD_SUBSYS_FILTER, 0);
   1720			append_filter_err(tr, pe, filter);
   1721		} else
   1722			event_set_filtered_flag(file);
   1723
   1724
   1725		filter_item = kzalloc(sizeof(*filter_item), GFP_KERNEL);
   1726		if (!filter_item)
   1727			goto fail_mem;
   1728
   1729		list_add_tail(&filter_item->list, &filter_list);
   1730		/*
   1731		 * Regardless of if this returned an error, we still
   1732		 * replace the filter for the call.
   1733		 */
   1734		filter_item->filter = event_filter(file);
   1735		event_set_filter(file, filter);
   1736		filter = NULL;
   1737
   1738		fail = false;
   1739	}
   1740
   1741	if (fail)
   1742		goto fail;
   1743
   1744	/*
   1745	 * The calls can still be using the old filters.
   1746	 * Do a synchronize_rcu() and to ensure all calls are
   1747	 * done with them before we free them.
   1748	 */
   1749	tracepoint_synchronize_unregister();
   1750	list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
   1751		__free_filter(filter_item->filter);
   1752		list_del(&filter_item->list);
   1753		kfree(filter_item);
   1754	}
   1755	return 0;
   1756 fail:
   1757	/* No call succeeded */
   1758	list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
   1759		list_del(&filter_item->list);
   1760		kfree(filter_item);
   1761	}
   1762	parse_error(pe, FILT_ERR_BAD_SUBSYS_FILTER, 0);
   1763	return -EINVAL;
   1764 fail_mem:
   1765	__free_filter(filter);
   1766	/* If any call succeeded, we still need to sync */
   1767	if (!fail)
   1768		tracepoint_synchronize_unregister();
   1769	list_for_each_entry_safe(filter_item, tmp, &filter_list, list) {
   1770		__free_filter(filter_item->filter);
   1771		list_del(&filter_item->list);
   1772		kfree(filter_item);
   1773	}
   1774	return -ENOMEM;
   1775}
   1776
   1777static int create_filter_start(char *filter_string, bool set_str,
   1778			       struct filter_parse_error **pse,
   1779			       struct event_filter **filterp)
   1780{
   1781	struct event_filter *filter;
   1782	struct filter_parse_error *pe = NULL;
   1783	int err = 0;
   1784
   1785	if (WARN_ON_ONCE(*pse || *filterp))
   1786		return -EINVAL;
   1787
   1788	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
   1789	if (filter && set_str) {
   1790		filter->filter_string = kstrdup(filter_string, GFP_KERNEL);
   1791		if (!filter->filter_string)
   1792			err = -ENOMEM;
   1793	}
   1794
   1795	pe = kzalloc(sizeof(*pe), GFP_KERNEL);
   1796
   1797	if (!filter || !pe || err) {
   1798		kfree(pe);
   1799		__free_filter(filter);
   1800		return -ENOMEM;
   1801	}
   1802
   1803	/* we're committed to creating a new filter */
   1804	*filterp = filter;
   1805	*pse = pe;
   1806
   1807	return 0;
   1808}
   1809
   1810static void create_filter_finish(struct filter_parse_error *pe)
   1811{
   1812	kfree(pe);
   1813}
   1814
   1815/**
   1816 * create_filter - create a filter for a trace_event_call
   1817 * @tr: the trace array associated with these events
   1818 * @call: trace_event_call to create a filter for
   1819 * @filter_string: filter string
   1820 * @set_str: remember @filter_str and enable detailed error in filter
   1821 * @filterp: out param for created filter (always updated on return)
   1822 *           Must be a pointer that references a NULL pointer.
   1823 *
   1824 * Creates a filter for @call with @filter_str.  If @set_str is %true,
   1825 * @filter_str is copied and recorded in the new filter.
   1826 *
   1827 * On success, returns 0 and *@filterp points to the new filter.  On
   1828 * failure, returns -errno and *@filterp may point to %NULL or to a new
   1829 * filter.  In the latter case, the returned filter contains error
   1830 * information if @set_str is %true and the caller is responsible for
   1831 * freeing it.
   1832 */
   1833static int create_filter(struct trace_array *tr,
   1834			 struct trace_event_call *call,
   1835			 char *filter_string, bool set_str,
   1836			 struct event_filter **filterp)
   1837{
   1838	struct filter_parse_error *pe = NULL;
   1839	int err;
   1840
   1841	/* filterp must point to NULL */
   1842	if (WARN_ON(*filterp))
   1843		*filterp = NULL;
   1844
   1845	err = create_filter_start(filter_string, set_str, &pe, filterp);
   1846	if (err)
   1847		return err;
   1848
   1849	err = process_preds(call, filter_string, *filterp, pe);
   1850	if (err && set_str)
   1851		append_filter_err(tr, pe, *filterp);
   1852	create_filter_finish(pe);
   1853
   1854	return err;
   1855}
   1856
   1857int create_event_filter(struct trace_array *tr,
   1858			struct trace_event_call *call,
   1859			char *filter_str, bool set_str,
   1860			struct event_filter **filterp)
   1861{
   1862	return create_filter(tr, call, filter_str, set_str, filterp);
   1863}
   1864
   1865/**
   1866 * create_system_filter - create a filter for an event subsystem
   1867 * @dir: the descriptor for the subsystem directory
   1868 * @filter_str: filter string
   1869 * @filterp: out param for created filter (always updated on return)
   1870 *
   1871 * Identical to create_filter() except that it creates a subsystem filter
   1872 * and always remembers @filter_str.
   1873 */
   1874static int create_system_filter(struct trace_subsystem_dir *dir,
   1875				char *filter_str, struct event_filter **filterp)
   1876{
   1877	struct filter_parse_error *pe = NULL;
   1878	int err;
   1879
   1880	err = create_filter_start(filter_str, true, &pe, filterp);
   1881	if (!err) {
   1882		err = process_system_preds(dir, dir->tr, pe, filter_str);
   1883		if (!err) {
   1884			/* System filters just show a default message */
   1885			kfree((*filterp)->filter_string);
   1886			(*filterp)->filter_string = NULL;
   1887		} else {
   1888			append_filter_err(dir->tr, pe, *filterp);
   1889		}
   1890	}
   1891	create_filter_finish(pe);
   1892
   1893	return err;
   1894}
   1895
   1896/* caller must hold event_mutex */
   1897int apply_event_filter(struct trace_event_file *file, char *filter_string)
   1898{
   1899	struct trace_event_call *call = file->event_call;
   1900	struct event_filter *filter = NULL;
   1901	int err;
   1902
   1903	if (!strcmp(strstrip(filter_string), "0")) {
   1904		filter_disable(file);
   1905		filter = event_filter(file);
   1906
   1907		if (!filter)
   1908			return 0;
   1909
   1910		event_clear_filter(file);
   1911
   1912		/* Make sure the filter is not being used */
   1913		tracepoint_synchronize_unregister();
   1914		__free_filter(filter);
   1915
   1916		return 0;
   1917	}
   1918
   1919	err = create_filter(file->tr, call, filter_string, true, &filter);
   1920
   1921	/*
   1922	 * Always swap the call filter with the new filter
   1923	 * even if there was an error. If there was an error
   1924	 * in the filter, we disable the filter and show the error
   1925	 * string
   1926	 */
   1927	if (filter) {
   1928		struct event_filter *tmp;
   1929
   1930		tmp = event_filter(file);
   1931		if (!err)
   1932			event_set_filtered_flag(file);
   1933		else
   1934			filter_disable(file);
   1935
   1936		event_set_filter(file, filter);
   1937
   1938		if (tmp) {
   1939			/* Make sure the call is done with the filter */
   1940			tracepoint_synchronize_unregister();
   1941			__free_filter(tmp);
   1942		}
   1943	}
   1944
   1945	return err;
   1946}
   1947
   1948int apply_subsystem_event_filter(struct trace_subsystem_dir *dir,
   1949				 char *filter_string)
   1950{
   1951	struct event_subsystem *system = dir->subsystem;
   1952	struct trace_array *tr = dir->tr;
   1953	struct event_filter *filter = NULL;
   1954	int err = 0;
   1955
   1956	mutex_lock(&event_mutex);
   1957
   1958	/* Make sure the system still has events */
   1959	if (!dir->nr_events) {
   1960		err = -ENODEV;
   1961		goto out_unlock;
   1962	}
   1963
   1964	if (!strcmp(strstrip(filter_string), "0")) {
   1965		filter_free_subsystem_preds(dir, tr);
   1966		remove_filter_string(system->filter);
   1967		filter = system->filter;
   1968		system->filter = NULL;
   1969		/* Ensure all filters are no longer used */
   1970		tracepoint_synchronize_unregister();
   1971		filter_free_subsystem_filters(dir, tr);
   1972		__free_filter(filter);
   1973		goto out_unlock;
   1974	}
   1975
   1976	err = create_system_filter(dir, filter_string, &filter);
   1977	if (filter) {
   1978		/*
   1979		 * No event actually uses the system filter
   1980		 * we can free it without synchronize_rcu().
   1981		 */
   1982		__free_filter(system->filter);
   1983		system->filter = filter;
   1984	}
   1985out_unlock:
   1986	mutex_unlock(&event_mutex);
   1987
   1988	return err;
   1989}
   1990
   1991#ifdef CONFIG_PERF_EVENTS
   1992
   1993void ftrace_profile_free_filter(struct perf_event *event)
   1994{
   1995	struct event_filter *filter = event->filter;
   1996
   1997	event->filter = NULL;
   1998	__free_filter(filter);
   1999}
   2000
   2001struct function_filter_data {
   2002	struct ftrace_ops *ops;
   2003	int first_filter;
   2004	int first_notrace;
   2005};
   2006
   2007#ifdef CONFIG_FUNCTION_TRACER
   2008static char **
   2009ftrace_function_filter_re(char *buf, int len, int *count)
   2010{
   2011	char *str, **re;
   2012
   2013	str = kstrndup(buf, len, GFP_KERNEL);
   2014	if (!str)
   2015		return NULL;
   2016
   2017	/*
   2018	 * The argv_split function takes white space
   2019	 * as a separator, so convert ',' into spaces.
   2020	 */
   2021	strreplace(str, ',', ' ');
   2022
   2023	re = argv_split(GFP_KERNEL, str, count);
   2024	kfree(str);
   2025	return re;
   2026}
   2027
   2028static int ftrace_function_set_regexp(struct ftrace_ops *ops, int filter,
   2029				      int reset, char *re, int len)
   2030{
   2031	int ret;
   2032
   2033	if (filter)
   2034		ret = ftrace_set_filter(ops, re, len, reset);
   2035	else
   2036		ret = ftrace_set_notrace(ops, re, len, reset);
   2037
   2038	return ret;
   2039}
   2040
   2041static int __ftrace_function_set_filter(int filter, char *buf, int len,
   2042					struct function_filter_data *data)
   2043{
   2044	int i, re_cnt, ret = -EINVAL;
   2045	int *reset;
   2046	char **re;
   2047
   2048	reset = filter ? &data->first_filter : &data->first_notrace;
   2049
   2050	/*
   2051	 * The 'ip' field could have multiple filters set, separated
   2052	 * either by space or comma. We first cut the filter and apply
   2053	 * all pieces separately.
   2054	 */
   2055	re = ftrace_function_filter_re(buf, len, &re_cnt);
   2056	if (!re)
   2057		return -EINVAL;
   2058
   2059	for (i = 0; i < re_cnt; i++) {
   2060		ret = ftrace_function_set_regexp(data->ops, filter, *reset,
   2061						 re[i], strlen(re[i]));
   2062		if (ret)
   2063			break;
   2064
   2065		if (*reset)
   2066			*reset = 0;
   2067	}
   2068
   2069	argv_free(re);
   2070	return ret;
   2071}
   2072
   2073static int ftrace_function_check_pred(struct filter_pred *pred)
   2074{
   2075	struct ftrace_event_field *field = pred->field;
   2076
   2077	/*
   2078	 * Check the predicate for function trace, verify:
   2079	 *  - only '==' and '!=' is used
   2080	 *  - the 'ip' field is used
   2081	 */
   2082	if ((pred->op != OP_EQ) && (pred->op != OP_NE))
   2083		return -EINVAL;
   2084
   2085	if (strcmp(field->name, "ip"))
   2086		return -EINVAL;
   2087
   2088	return 0;
   2089}
   2090
   2091static int ftrace_function_set_filter_pred(struct filter_pred *pred,
   2092					   struct function_filter_data *data)
   2093{
   2094	int ret;
   2095
   2096	/* Checking the node is valid for function trace. */
   2097	ret = ftrace_function_check_pred(pred);
   2098	if (ret)
   2099		return ret;
   2100
   2101	return __ftrace_function_set_filter(pred->op == OP_EQ,
   2102					    pred->regex.pattern,
   2103					    pred->regex.len,
   2104					    data);
   2105}
   2106
   2107static bool is_or(struct prog_entry *prog, int i)
   2108{
   2109	int target;
   2110
   2111	/*
   2112	 * Only "||" is allowed for function events, thus,
   2113	 * all true branches should jump to true, and any
   2114	 * false branch should jump to false.
   2115	 */
   2116	target = prog[i].target + 1;
   2117	/* True and false have NULL preds (all prog entries should jump to one */
   2118	if (prog[target].pred)
   2119		return false;
   2120
   2121	/* prog[target].target is 1 for TRUE, 0 for FALSE */
   2122	return prog[i].when_to_branch == prog[target].target;
   2123}
   2124
   2125static int ftrace_function_set_filter(struct perf_event *event,
   2126				      struct event_filter *filter)
   2127{
   2128	struct prog_entry *prog = rcu_dereference_protected(filter->prog,
   2129						lockdep_is_held(&event_mutex));
   2130	struct function_filter_data data = {
   2131		.first_filter  = 1,
   2132		.first_notrace = 1,
   2133		.ops           = &event->ftrace_ops,
   2134	};
   2135	int i;
   2136
   2137	for (i = 0; prog[i].pred; i++) {
   2138		struct filter_pred *pred = prog[i].pred;
   2139
   2140		if (!is_or(prog, i))
   2141			return -EINVAL;
   2142
   2143		if (ftrace_function_set_filter_pred(pred, &data) < 0)
   2144			return -EINVAL;
   2145	}
   2146	return 0;
   2147}
   2148#else
   2149static int ftrace_function_set_filter(struct perf_event *event,
   2150				      struct event_filter *filter)
   2151{
   2152	return -ENODEV;
   2153}
   2154#endif /* CONFIG_FUNCTION_TRACER */
   2155
   2156int ftrace_profile_set_filter(struct perf_event *event, int event_id,
   2157			      char *filter_str)
   2158{
   2159	int err;
   2160	struct event_filter *filter = NULL;
   2161	struct trace_event_call *call;
   2162
   2163	mutex_lock(&event_mutex);
   2164
   2165	call = event->tp_event;
   2166
   2167	err = -EINVAL;
   2168	if (!call)
   2169		goto out_unlock;
   2170
   2171	err = -EEXIST;
   2172	if (event->filter)
   2173		goto out_unlock;
   2174
   2175	err = create_filter(NULL, call, filter_str, false, &filter);
   2176	if (err)
   2177		goto free_filter;
   2178
   2179	if (ftrace_event_is_function(call))
   2180		err = ftrace_function_set_filter(event, filter);
   2181	else
   2182		event->filter = filter;
   2183
   2184free_filter:
   2185	if (err || ftrace_event_is_function(call))
   2186		__free_filter(filter);
   2187
   2188out_unlock:
   2189	mutex_unlock(&event_mutex);
   2190
   2191	return err;
   2192}
   2193
   2194#endif /* CONFIG_PERF_EVENTS */
   2195
   2196#ifdef CONFIG_FTRACE_STARTUP_TEST
   2197
   2198#include <linux/types.h>
   2199#include <linux/tracepoint.h>
   2200
   2201#define CREATE_TRACE_POINTS
   2202#include "trace_events_filter_test.h"
   2203
   2204#define DATA_REC(m, va, vb, vc, vd, ve, vf, vg, vh, nvisit) \
   2205{ \
   2206	.filter = FILTER, \
   2207	.rec    = { .a = va, .b = vb, .c = vc, .d = vd, \
   2208		    .e = ve, .f = vf, .g = vg, .h = vh }, \
   2209	.match  = m, \
   2210	.not_visited = nvisit, \
   2211}
   2212#define YES 1
   2213#define NO  0
   2214
   2215static struct test_filter_data_t {
   2216	char *filter;
   2217	struct trace_event_raw_ftrace_test_filter rec;
   2218	int match;
   2219	char *not_visited;
   2220} test_filter_data[] = {
   2221#define FILTER "a == 1 && b == 1 && c == 1 && d == 1 && " \
   2222	       "e == 1 && f == 1 && g == 1 && h == 1"
   2223	DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, ""),
   2224	DATA_REC(NO,  0, 1, 1, 1, 1, 1, 1, 1, "bcdefgh"),
   2225	DATA_REC(NO,  1, 1, 1, 1, 1, 1, 1, 0, ""),
   2226#undef FILTER
   2227#define FILTER "a == 1 || b == 1 || c == 1 || d == 1 || " \
   2228	       "e == 1 || f == 1 || g == 1 || h == 1"
   2229	DATA_REC(NO,  0, 0, 0, 0, 0, 0, 0, 0, ""),
   2230	DATA_REC(YES, 0, 0, 0, 0, 0, 0, 0, 1, ""),
   2231	DATA_REC(YES, 1, 0, 0, 0, 0, 0, 0, 0, "bcdefgh"),
   2232#undef FILTER
   2233#define FILTER "(a == 1 || b == 1) && (c == 1 || d == 1) && " \
   2234	       "(e == 1 || f == 1) && (g == 1 || h == 1)"
   2235	DATA_REC(NO,  0, 0, 1, 1, 1, 1, 1, 1, "dfh"),
   2236	DATA_REC(YES, 0, 1, 0, 1, 0, 1, 0, 1, ""),
   2237	DATA_REC(YES, 1, 0, 1, 0, 0, 1, 0, 1, "bd"),
   2238	DATA_REC(NO,  1, 0, 1, 0, 0, 1, 0, 0, "bd"),
   2239#undef FILTER
   2240#define FILTER "(a == 1 && b == 1) || (c == 1 && d == 1) || " \
   2241	       "(e == 1 && f == 1) || (g == 1 && h == 1)"
   2242	DATA_REC(YES, 1, 0, 1, 1, 1, 1, 1, 1, "efgh"),
   2243	DATA_REC(YES, 0, 0, 0, 0, 0, 0, 1, 1, ""),
   2244	DATA_REC(NO,  0, 0, 0, 0, 0, 0, 0, 1, ""),
   2245#undef FILTER
   2246#define FILTER "(a == 1 && b == 1) && (c == 1 && d == 1) && " \
   2247	       "(e == 1 && f == 1) || (g == 1 && h == 1)"
   2248	DATA_REC(YES, 1, 1, 1, 1, 1, 1, 0, 0, "gh"),
   2249	DATA_REC(NO,  0, 0, 0, 0, 0, 0, 0, 1, ""),
   2250	DATA_REC(YES, 1, 1, 1, 1, 1, 0, 1, 1, ""),
   2251#undef FILTER
   2252#define FILTER "((a == 1 || b == 1) || (c == 1 || d == 1) || " \
   2253	       "(e == 1 || f == 1)) && (g == 1 || h == 1)"
   2254	DATA_REC(YES, 1, 1, 1, 1, 1, 1, 0, 1, "bcdef"),
   2255	DATA_REC(NO,  0, 0, 0, 0, 0, 0, 0, 0, ""),
   2256	DATA_REC(YES, 1, 1, 1, 1, 1, 0, 1, 1, "h"),
   2257#undef FILTER
   2258#define FILTER "((((((((a == 1) && (b == 1)) || (c == 1)) && (d == 1)) || " \
   2259	       "(e == 1)) && (f == 1)) || (g == 1)) && (h == 1))"
   2260	DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, "ceg"),
   2261	DATA_REC(NO,  0, 1, 0, 1, 0, 1, 0, 1, ""),
   2262	DATA_REC(NO,  1, 0, 1, 0, 1, 0, 1, 0, ""),
   2263#undef FILTER
   2264#define FILTER "((((((((a == 1) || (b == 1)) && (c == 1)) || (d == 1)) && " \
   2265	       "(e == 1)) || (f == 1)) && (g == 1)) || (h == 1))"
   2266	DATA_REC(YES, 1, 1, 1, 1, 1, 1, 1, 1, "bdfh"),
   2267	DATA_REC(YES, 0, 1, 0, 1, 0, 1, 0, 1, ""),
   2268	DATA_REC(YES, 1, 0, 1, 0, 1, 0, 1, 0, "bdfh"),
   2269};
   2270
   2271#undef DATA_REC
   2272#undef FILTER
   2273#undef YES
   2274#undef NO
   2275
   2276#define DATA_CNT ARRAY_SIZE(test_filter_data)
   2277
   2278static int test_pred_visited;
   2279
   2280static int test_pred_visited_fn(struct filter_pred *pred, void *event)
   2281{
   2282	struct ftrace_event_field *field = pred->field;
   2283
   2284	test_pred_visited = 1;
   2285	printk(KERN_INFO "\npred visited %s\n", field->name);
   2286	return 1;
   2287}
   2288
   2289static void update_pred_fn(struct event_filter *filter, char *fields)
   2290{
   2291	struct prog_entry *prog = rcu_dereference_protected(filter->prog,
   2292						lockdep_is_held(&event_mutex));
   2293	int i;
   2294
   2295	for (i = 0; prog[i].pred; i++) {
   2296		struct filter_pred *pred = prog[i].pred;
   2297		struct ftrace_event_field *field = pred->field;
   2298
   2299		WARN_ON_ONCE(!pred->fn);
   2300
   2301		if (!field) {
   2302			WARN_ONCE(1, "all leafs should have field defined %d", i);
   2303			continue;
   2304		}
   2305
   2306		if (!strchr(fields, *field->name))
   2307			continue;
   2308
   2309		pred->fn = test_pred_visited_fn;
   2310	}
   2311}
   2312
   2313static __init int ftrace_test_event_filter(void)
   2314{
   2315	int i;
   2316
   2317	printk(KERN_INFO "Testing ftrace filter: ");
   2318
   2319	for (i = 0; i < DATA_CNT; i++) {
   2320		struct event_filter *filter = NULL;
   2321		struct test_filter_data_t *d = &test_filter_data[i];
   2322		int err;
   2323
   2324		err = create_filter(NULL, &event_ftrace_test_filter,
   2325				    d->filter, false, &filter);
   2326		if (err) {
   2327			printk(KERN_INFO
   2328			       "Failed to get filter for '%s', err %d\n",
   2329			       d->filter, err);
   2330			__free_filter(filter);
   2331			break;
   2332		}
   2333
   2334		/* Needed to dereference filter->prog */
   2335		mutex_lock(&event_mutex);
   2336		/*
   2337		 * The preemption disabling is not really needed for self
   2338		 * tests, but the rcu dereference will complain without it.
   2339		 */
   2340		preempt_disable();
   2341		if (*d->not_visited)
   2342			update_pred_fn(filter, d->not_visited);
   2343
   2344		test_pred_visited = 0;
   2345		err = filter_match_preds(filter, &d->rec);
   2346		preempt_enable();
   2347
   2348		mutex_unlock(&event_mutex);
   2349
   2350		__free_filter(filter);
   2351
   2352		if (test_pred_visited) {
   2353			printk(KERN_INFO
   2354			       "Failed, unwanted pred visited for filter %s\n",
   2355			       d->filter);
   2356			break;
   2357		}
   2358
   2359		if (err != d->match) {
   2360			printk(KERN_INFO
   2361			       "Failed to match filter '%s', expected %d\n",
   2362			       d->filter, d->match);
   2363			break;
   2364		}
   2365	}
   2366
   2367	if (i == DATA_CNT)
   2368		printk(KERN_CONT "OK\n");
   2369
   2370	return 0;
   2371}
   2372
   2373late_initcall(ftrace_test_event_filter);
   2374
   2375#endif /* CONFIG_FTRACE_STARTUP_TEST */