66 lines
2.6 KiB
Diff
66 lines
2.6 KiB
Diff
From 8e8f12df7500f501447a2926a9e1db9ff42d882c Mon Sep 17 00:00:00 2001
|
|
From: Rikard Falkeborn <rikard.falkeborn@gmail.com>
|
|
Date: Fri, 12 Apr 2019 11:22:49 -0300
|
|
Subject: [PATCH] tools lib traceevent: Fix missing equality check for strcmp
|
|
|
|
There was a missing comparison with 0 when checking if type is "s64" or
|
|
"u64". Therefore, the body of the if-statement was entered if "type" was
|
|
"u64" or not "s64", which made the first strcmp() redundant since if
|
|
type is "u64", it's not "s64".
|
|
|
|
If type is "s64", the body of the if-statement is not entered but since
|
|
the remainder of the function consists of if-statements which will not
|
|
be entered if type is "s64", we will just return "val", which is
|
|
correct, albeit at the cost of a few more calls to strcmp(), i.e., it
|
|
will behave just as if the if-statement was entered.
|
|
|
|
If type is neither "s64" or "u64", the body of the if-statement will be
|
|
entered incorrectly and "val" returned. This means that any type that is
|
|
checked after "s64" and "u64" is handled the same way as "s64" and
|
|
"u64", i.e., the limiting of "val" to fit in for example "s8" is never
|
|
reached.
|
|
|
|
This was introduced in the kernel tree when the sources were copied from
|
|
trace-cmd in commit f7d82350e597 ("tools/events: Add files to create
|
|
libtraceevent.a"), and in the trace-cmd repo in 1cdbae6035cei
|
|
("Implement typecasting in parser") when the function was introduced,
|
|
i.e., it has always behaved the wrong way.
|
|
|
|
Detected by cppcheck.
|
|
|
|
Link: http://lkml.kernel.org/r/20190412142250.20595-7-acme@kernel.org
|
|
|
|
Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
|
|
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
Cc: Ingo Molnar <mingo@kernel.org>
|
|
Cc: Thomas Gleixner <tglx@linutronix.de>
|
|
Cc: Jiri Olsa <jolsa@kernel.org>
|
|
Cc: Namhyung Kim <namhyung@kernel.org>
|
|
Cc: Clark Williams <williams@redhat.com>
|
|
Cc: Tzvetomir Stoyanov <tstoyanov@vmware.com>
|
|
Fixes: f7d82350e597 ("tools/events: Add files to create libtraceevent.a")
|
|
Link: http://lkml.kernel.org/r/20190409091529.2686-1-rikard.falkeborn@gmail.com
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
---
|
|
event-parse.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/event-parse.c b/event-parse.c
|
|
index e5f2acbb70cc..7dba02bd19fe 100644
|
|
--- a/event-parse.c
|
|
+++ b/event-parse.c
|
|
@@ -2206,7 +2206,7 @@ eval_type_str(unsigned long long val, const char *type, int pointer)
|
|
return val & 0xffffffff;
|
|
|
|
if (strcmp(type, "u64") == 0 ||
|
|
- strcmp(type, "s64"))
|
|
+ strcmp(type, "s64") == 0)
|
|
return val;
|
|
|
|
if (strcmp(type, "s8") == 0)
|
|
--
|
|
2.20.1
|
|
|