diff options
Diffstat (limited to 'kernel/trace')
-rw-r--r-- | kernel/trace/ftrace.c | 3 | ||||
-rw-r--r-- | kernel/trace/trace.c | 14 | ||||
-rw-r--r-- | kernel/trace/trace_events.c | 2 | ||||
-rw-r--r-- | kernel/trace/trace_events_filter.c | 9 | ||||
-rw-r--r-- | kernel/trace/trace_selftest_dynamic.c | 5 | ||||
-rw-r--r-- | kernel/trace/trace_uprobe.c | 2 |
6 files changed, 15 insertions, 20 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 554b517c61a0..eac9ce2c57a2 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
@@ -4456,7 +4456,6 @@ unregister_ftrace_function_probe_func(char *glob, struct trace_array *tr, | |||
4456 | func_g.type = filter_parse_regex(glob, strlen(glob), | 4456 | func_g.type = filter_parse_regex(glob, strlen(glob), |
4457 | &func_g.search, ¬); | 4457 | &func_g.search, ¬); |
4458 | func_g.len = strlen(func_g.search); | 4458 | func_g.len = strlen(func_g.search); |
4459 | func_g.search = glob; | ||
4460 | 4459 | ||
4461 | /* we do not support '!' for function probes */ | 4460 | /* we do not support '!' for function probes */ |
4462 | if (WARN_ON(not)) | 4461 | if (WARN_ON(not)) |
@@ -5015,7 +5014,6 @@ int ftrace_regex_release(struct inode *inode, struct file *file) | |||
5015 | 5014 | ||
5016 | parser = &iter->parser; | 5015 | parser = &iter->parser; |
5017 | if (trace_parser_loaded(parser)) { | 5016 | if (trace_parser_loaded(parser)) { |
5018 | parser->buffer[parser->idx] = 0; | ||
5019 | ftrace_match_records(iter->hash, parser->buffer, parser->idx); | 5017 | ftrace_match_records(iter->hash, parser->buffer, parser->idx); |
5020 | } | 5018 | } |
5021 | 5019 | ||
@@ -5329,7 +5327,6 @@ ftrace_graph_release(struct inode *inode, struct file *file) | |||
5329 | parser = &fgd->parser; | 5327 | parser = &fgd->parser; |
5330 | 5328 | ||
5331 | if (trace_parser_loaded((parser))) { | 5329 | if (trace_parser_loaded((parser))) { |
5332 | parser->buffer[parser->idx] = 0; | ||
5333 | ret = ftrace_graph_set_hash(fgd->new_hash, | 5330 | ret = ftrace_graph_set_hash(fgd->new_hash, |
5334 | parser->buffer); | 5331 | parser->buffer); |
5335 | } | 5332 | } |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 32c069bbf41b..56608538a4ad 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -530,8 +530,6 @@ int trace_pid_write(struct trace_pid_list *filtered_pids, | |||
530 | ubuf += ret; | 530 | ubuf += ret; |
531 | cnt -= ret; | 531 | cnt -= ret; |
532 | 532 | ||
533 | parser.buffer[parser.idx] = 0; | ||
534 | |||
535 | ret = -EINVAL; | 533 | ret = -EINVAL; |
536 | if (kstrtoul(parser.buffer, 0, &val)) | 534 | if (kstrtoul(parser.buffer, 0, &val)) |
537 | break; | 535 | break; |
@@ -1236,18 +1234,18 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf, | |||
1236 | cnt--; | 1234 | cnt--; |
1237 | } | 1235 | } |
1238 | 1236 | ||
1237 | parser->idx = 0; | ||
1238 | |||
1239 | /* only spaces were written */ | 1239 | /* only spaces were written */ |
1240 | if (isspace(ch)) { | 1240 | if (isspace(ch) || !ch) { |
1241 | *ppos += read; | 1241 | *ppos += read; |
1242 | ret = read; | 1242 | ret = read; |
1243 | goto out; | 1243 | goto out; |
1244 | } | 1244 | } |
1245 | |||
1246 | parser->idx = 0; | ||
1247 | } | 1245 | } |
1248 | 1246 | ||
1249 | /* read the non-space input */ | 1247 | /* read the non-space input */ |
1250 | while (cnt && !isspace(ch)) { | 1248 | while (cnt && !isspace(ch) && ch) { |
1251 | if (parser->idx < parser->size - 1) | 1249 | if (parser->idx < parser->size - 1) |
1252 | parser->buffer[parser->idx++] = ch; | 1250 | parser->buffer[parser->idx++] = ch; |
1253 | else { | 1251 | else { |
@@ -1262,12 +1260,14 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf, | |||
1262 | } | 1260 | } |
1263 | 1261 | ||
1264 | /* We either got finished input or we have to wait for another call. */ | 1262 | /* We either got finished input or we have to wait for another call. */ |
1265 | if (isspace(ch)) { | 1263 | if (isspace(ch) || !ch) { |
1266 | parser->buffer[parser->idx] = 0; | 1264 | parser->buffer[parser->idx] = 0; |
1267 | parser->cont = false; | 1265 | parser->cont = false; |
1268 | } else if (parser->idx < parser->size - 1) { | 1266 | } else if (parser->idx < parser->size - 1) { |
1269 | parser->cont = true; | 1267 | parser->cont = true; |
1270 | parser->buffer[parser->idx++] = ch; | 1268 | parser->buffer[parser->idx++] = ch; |
1269 | /* Make sure the parsed string always terminates with '\0'. */ | ||
1270 | parser->buffer[parser->idx] = 0; | ||
1271 | } else { | 1271 | } else { |
1272 | ret = -EINVAL; | 1272 | ret = -EINVAL; |
1273 | goto out; | 1273 | goto out; |
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 1b87157edbff..05c7172c6667 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -885,8 +885,6 @@ ftrace_event_write(struct file *file, const char __user *ubuf, | |||
885 | if (*parser.buffer == '!') | 885 | if (*parser.buffer == '!') |
886 | set = 0; | 886 | set = 0; |
887 | 887 | ||
888 | parser.buffer[parser.idx] = 0; | ||
889 | |||
890 | ret = ftrace_set_clr_event(tr, parser.buffer + !set, set); | 888 | ret = ftrace_set_clr_event(tr, parser.buffer + !set, set); |
891 | if (ret) | 889 | if (ret) |
892 | goto out_put; | 890 | goto out_put; |
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c index 61e7f0678d33..a764aec3c9a1 100644 --- a/kernel/trace/trace_events_filter.c +++ b/kernel/trace/trace_events_filter.c | |||
@@ -400,7 +400,6 @@ enum regex_type filter_parse_regex(char *buff, int len, char **search, int *not) | |||
400 | for (i = 0; i < len; i++) { | 400 | for (i = 0; i < len; i++) { |
401 | if (buff[i] == '*') { | 401 | if (buff[i] == '*') { |
402 | if (!i) { | 402 | if (!i) { |
403 | *search = buff + 1; | ||
404 | type = MATCH_END_ONLY; | 403 | type = MATCH_END_ONLY; |
405 | } else if (i == len - 1) { | 404 | } else if (i == len - 1) { |
406 | if (type == MATCH_END_ONLY) | 405 | if (type == MATCH_END_ONLY) |
@@ -410,14 +409,14 @@ enum regex_type filter_parse_regex(char *buff, int len, char **search, int *not) | |||
410 | buff[i] = 0; | 409 | buff[i] = 0; |
411 | break; | 410 | break; |
412 | } else { /* pattern continues, use full glob */ | 411 | } else { /* pattern continues, use full glob */ |
413 | type = MATCH_GLOB; | 412 | return MATCH_GLOB; |
414 | break; | ||
415 | } | 413 | } |
416 | } else if (strchr("[?\\", buff[i])) { | 414 | } else if (strchr("[?\\", buff[i])) { |
417 | type = MATCH_GLOB; | 415 | return MATCH_GLOB; |
418 | break; | ||
419 | } | 416 | } |
420 | } | 417 | } |
418 | if (buff[0] == '*') | ||
419 | *search = buff + 1; | ||
421 | 420 | ||
422 | return type; | 421 | return type; |
423 | } | 422 | } |
diff --git a/kernel/trace/trace_selftest_dynamic.c b/kernel/trace/trace_selftest_dynamic.c index 8cda06a10d66..c364cf777e1a 100644 --- a/kernel/trace/trace_selftest_dynamic.c +++ b/kernel/trace/trace_selftest_dynamic.c | |||
@@ -1,13 +1,14 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | 1 | // SPDX-License-Identifier: GPL-2.0 |
2 | #include <linux/compiler.h> | ||
2 | #include "trace.h" | 3 | #include "trace.h" |
3 | 4 | ||
4 | int DYN_FTRACE_TEST_NAME(void) | 5 | noinline __noclone int DYN_FTRACE_TEST_NAME(void) |
5 | { | 6 | { |
6 | /* used to call mcount */ | 7 | /* used to call mcount */ |
7 | return 0; | 8 | return 0; |
8 | } | 9 | } |
9 | 10 | ||
10 | int DYN_FTRACE_TEST_NAME2(void) | 11 | noinline __noclone int DYN_FTRACE_TEST_NAME2(void) |
11 | { | 12 | { |
12 | /* used to call mcount */ | 13 | /* used to call mcount */ |
13 | return 0; | 14 | return 0; |
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 40592e7b3568..268029ae1be6 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c | |||
@@ -608,7 +608,7 @@ static int probes_seq_show(struct seq_file *m, void *v) | |||
608 | 608 | ||
609 | /* Don't print "0x (null)" when offset is 0 */ | 609 | /* Don't print "0x (null)" when offset is 0 */ |
610 | if (tu->offset) { | 610 | if (tu->offset) { |
611 | seq_printf(m, "0x%p", (void *)tu->offset); | 611 | seq_printf(m, "0x%px", (void *)tu->offset); |
612 | } else { | 612 | } else { |
613 | switch (sizeof(void *)) { | 613 | switch (sizeof(void *)) { |
614 | case 4: | 614 | case 4: |