* [PATCH 2/3] libtraceevent: Fix check-after-deref coverity flaw
2022-09-30 11:09 [PATCH 0/3] Fix several Coverity andf Clang warnings in libtraceevent Michael Petlan
2022-09-30 11:10 ` [PATCH 1/3] libtraceevent: Fix uninitialized has_0x compiler warning Michael Petlan
@ 2022-09-30 11:10 ` Michael Petlan
2022-09-30 11:10 ` [PATCH 3/3] libtraceevent: Fix Branch condition garbage value compiler warning Michael Petlan
2022-10-20 19:15 ` [PATCH 0/3] Fix several Coverity andf Clang warnings in libtraceevent Steven Rostedt
3 siblings, 0 replies; 5+ messages in thread
From: Michael Petlan @ 2022-09-30 11:10 UTC (permalink / raw)
To: linux-trace-devel; +Cc: rostedt
Before patch, both arg->bitmask.field and arg->string.field were checked
for being NULL and if yes, some value was assigned to them. The value
was immediately used (dereferenced) and after that, another check for
NULL was performed (the one leading to break command). However, in case
this check would be true, the dereferencing before would have already
caused a crash.
Move the NULL checks before dereferencing the pointers.
Signed-off-by: Michael Petlan <mpetlan@redhat.com>
---
src/event-parse.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/event-parse.c b/src/event-parse.c
index edf990a..b4094ec 100644
--- a/src/event-parse.c
+++ b/src/event-parse.c
@@ -4623,10 +4623,10 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
case TEP_PRINT_STRING: {
if (!arg->string.field) {
arg->string.field = tep_find_any_field(event, arg->string.string);
+ if (!arg->string.field)
+ break;
arg->string.offset = arg->string.field->offset;
}
- if (!arg->string.field)
- break;
dynamic_offset_field(tep, arg->string.field, data, size, &offset, &len);
/* Do not attempt to save zero length dynamic strings */
if (!len)
@@ -4640,10 +4640,10 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
case TEP_PRINT_BITMASK: {
if (!arg->bitmask.field) {
arg->bitmask.field = tep_find_any_field(event, arg->bitmask.bitmask);
+ if (!arg->bitmask.field)
+ break;
arg->bitmask.offset = arg->bitmask.field->offset;
}
- if (!arg->bitmask.field)
- break;
dynamic_offset_field(tep, arg->bitmask.field, data, size, &offset, &len);
print_bitmask_to_seq(tep, s, format, len_arg,
data + offset, len);
--
2.18.4
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH 3/3] libtraceevent: Fix Branch condition garbage value compiler warning
2022-09-30 11:09 [PATCH 0/3] Fix several Coverity andf Clang warnings in libtraceevent Michael Petlan
2022-09-30 11:10 ` [PATCH 1/3] libtraceevent: Fix uninitialized has_0x compiler warning Michael Petlan
2022-09-30 11:10 ` [PATCH 2/3] libtraceevent: Fix check-after-deref coverity flaw Michael Petlan
@ 2022-09-30 11:10 ` Michael Petlan
2022-10-20 19:15 ` [PATCH 0/3] Fix several Coverity andf Clang warnings in libtraceevent Steven Rostedt
3 siblings, 0 replies; 5+ messages in thread
From: Michael Petlan @ 2022-09-30 11:10 UTC (permalink / raw)
To: linux-trace-devel; +Cc: rostedt
If *offset equals to zero, it is zero. If not equals to zero, set it to
zero. In any case, it will be zero, so we can omit the condition and so
get rid of the compiler warning:
libtraceevent/src/event-parse.c:4064:7: warning[core.uninitialized.Branch]: Branch condition evaluates to a garbage value
Instead, let's rather check the pointers for being NULL, in order to
prevent another warning:
libtraceevent/src/event-parse.c:4064:7: warning[core.NullDereference]: Dereference of null pointer (loaded from variable 'offset')
Signed-off-by: Michael Petlan <mpetlan@redhat.com>
---
src/event-parse.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/event-parse.c b/src/event-parse.c
index b4094ec..60bf989 100644
--- a/src/event-parse.c
+++ b/src/event-parse.c
@@ -4073,9 +4073,9 @@ static inline void dynamic_offset_field(struct tep_handle *tep,
{
/* Test for overflow */
if (field->offset + field->size > size) {
- if (*offset)
+ if (offset)
*offset = 0;
- if (*len)
+ if (len)
*len = 0;
return;
}
--
2.18.4
^ permalink raw reply related [flat|nested] 5+ messages in thread