aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (VMware) <rostedt@goodmis.org>2018-12-21 23:10:26 -0500
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2018-12-22 22:52:30 -0500
commit3d739c1f6156c70eb0548aa288dcfbac9e0bd162 (patch)
tree4f2ae9eccd5478a2689171c8ce2c6466d4b9c247
parent036876fa56204ae0fa59045bd6bbb2691a060633 (diff)
tracing: Use the return of str_has_prefix() to remove open coded numbers
There are several locations that compare constants to the beginning of string variables to determine what commands should be done, then the constant length is used to index into the string. This is error prone as the hard coded numbers have to match the size of the constants. Instead, use the len returned from str_has_prefix() and remove the open coded string length sizes. Cc: Joe Perches <joe@perches.com> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> (for trace_probe part) Acked-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r--kernel/trace/trace.c8
-rw-r--r--kernel/trace/trace_probe.c17
-rw-r--r--kernel/trace/trace_stack.c6
3 files changed, 18 insertions, 13 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index eac2824a18ab..18b86c3974e1 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4408,13 +4408,15 @@ static int trace_set_options(struct trace_array *tr, char *option)
4408 int neg = 0; 4408 int neg = 0;
4409 int ret; 4409 int ret;
4410 size_t orig_len = strlen(option); 4410 size_t orig_len = strlen(option);
4411 int len;
4411 4412
4412 cmp = strstrip(option); 4413 cmp = strstrip(option);
4413 4414
4414 if (str_has_prefix(cmp, "no")) { 4415 len = str_has_prefix(cmp, "no");
4416 if (len)
4415 neg = 1; 4417 neg = 1;
4416 cmp += 2; 4418
4417 } 4419 cmp += len;
4418 4420
4419 mutex_lock(&trace_types_lock); 4421 mutex_lock(&trace_types_lock);
4420 4422
diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index 541375737403..9962cb5da8ac 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -186,19 +186,20 @@ int traceprobe_parse_event_name(const char **pevent, const char **pgroup,
186static int parse_probe_vars(char *arg, const struct fetch_type *t, 186static int parse_probe_vars(char *arg, const struct fetch_type *t,
187 struct fetch_insn *code, unsigned int flags) 187 struct fetch_insn *code, unsigned int flags)
188{ 188{
189 int ret = 0;
190 unsigned long param; 189 unsigned long param;
190 int ret = 0;
191 int len;
191 192
192 if (strcmp(arg, "retval") == 0) { 193 if (strcmp(arg, "retval") == 0) {
193 if (flags & TPARG_FL_RETURN) 194 if (flags & TPARG_FL_RETURN)
194 code->op = FETCH_OP_RETVAL; 195 code->op = FETCH_OP_RETVAL;
195 else 196 else
196 ret = -EINVAL; 197 ret = -EINVAL;
197 } else if (str_has_prefix(arg, "stack")) { 198 } else if ((len = str_has_prefix(arg, "stack"))) {
198 if (arg[5] == '\0') { 199 if (arg[len] == '\0') {
199 code->op = FETCH_OP_STACKP; 200 code->op = FETCH_OP_STACKP;
200 } else if (isdigit(arg[5])) { 201 } else if (isdigit(arg[len])) {
201 ret = kstrtoul(arg + 5, 10, &param); 202 ret = kstrtoul(arg + len, 10, &param);
202 if (ret || ((flags & TPARG_FL_KERNEL) && 203 if (ret || ((flags & TPARG_FL_KERNEL) &&
203 param > PARAM_MAX_STACK)) 204 param > PARAM_MAX_STACK))
204 ret = -EINVAL; 205 ret = -EINVAL;
@@ -213,10 +214,10 @@ static int parse_probe_vars(char *arg, const struct fetch_type *t,
213#ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API 214#ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
214 } else if (((flags & TPARG_FL_MASK) == 215 } else if (((flags & TPARG_FL_MASK) ==
215 (TPARG_FL_KERNEL | TPARG_FL_FENTRY)) && 216 (TPARG_FL_KERNEL | TPARG_FL_FENTRY)) &&
216 str_has_prefix(arg, "arg")) { 217 (len = str_has_prefix(arg, "arg"))) {
217 if (!isdigit(arg[3])) 218 if (!isdigit(arg[len]))
218 return -EINVAL; 219 return -EINVAL;
219 ret = kstrtoul(arg + 3, 10, &param); 220 ret = kstrtoul(arg + len, 10, &param);
220 if (ret || !param || param > PARAM_MAX_STACK) 221 if (ret || !param || param > PARAM_MAX_STACK)
221 return -EINVAL; 222 return -EINVAL;
222 code->op = FETCH_OP_ARG; 223 code->op = FETCH_OP_ARG;
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 3641f28c343f..eec648a0d673 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -448,8 +448,10 @@ static char stack_trace_filter_buf[COMMAND_LINE_SIZE+1] __initdata;
448 448
449static __init int enable_stacktrace(char *str) 449static __init int enable_stacktrace(char *str)
450{ 450{
451 if (str_has_prefix(str, "_filter=")) 451 int len;
452 strncpy(stack_trace_filter_buf, str+8, COMMAND_LINE_SIZE); 452
453 if ((len = str_has_prefix(str, "_filter=")))
454 strncpy(stack_trace_filter_buf, str + len, COMMAND_LINE_SIZE);
453 455
454 stack_tracer_enabled = 1; 456 stack_tracer_enabled = 1;
455 last_stack_tracer_enabled = 1; 457 last_stack_tracer_enabled = 1;