aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMasami Hiramatsu <mhiramat@kernel.org>2019-03-14 00:30:09 -0400
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2019-03-14 19:53:29 -0400
commit287c038c0b994dae7569d96eca154f6a7ff6b4a9 (patch)
treeaf047c1815219d747c752488a7d37dc1a21c297a
parent31b265b3baaf55f209229888b7ffea523ddab366 (diff)
tracing/probe: Check maxactive error cases
Check maxactive on kprobe error case, because maxactive is only for kretprobe, not for kprobe. Also, maxactive should not be 0, it should be at least 1. Link: http://lkml.kernel.org/r/155253780952.14922.15784129810238750331.stgit@devnote2 Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r--kernel/trace/trace_kprobe.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index ceafa0a2b1d1..a14837545295 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -624,7 +624,11 @@ static int trace_kprobe_create(int argc, const char *argv[])
624 if (event) 624 if (event)
625 event++; 625 event++;
626 626
627 if (is_return && isdigit(argv[0][1])) { 627 if (isdigit(argv[0][1])) {
628 if (!is_return) {
629 pr_info("Maxactive is not for kprobe");
630 return -EINVAL;
631 }
628 if (event) 632 if (event)
629 len = event - &argv[0][1] - 1; 633 len = event - &argv[0][1] - 1;
630 else 634 else
@@ -634,8 +638,8 @@ static int trace_kprobe_create(int argc, const char *argv[])
634 memcpy(buf, &argv[0][1], len); 638 memcpy(buf, &argv[0][1], len);
635 buf[len] = '\0'; 639 buf[len] = '\0';
636 ret = kstrtouint(buf, 0, &maxactive); 640 ret = kstrtouint(buf, 0, &maxactive);
637 if (ret) { 641 if (ret || !maxactive) {
638 pr_info("Failed to parse maxactive.\n"); 642 pr_info("Invalid maxactive number\n");
639 return ret; 643 return ret;
640 } 644 }
641 /* kretprobes instances are iterated over via a list. The 645 /* kretprobes instances are iterated over via a list. The