Skip to content

Commit 8fbeb52

Browse files
Tom Zanussirostedt
authored andcommitted
tracing: Fix parse_synth_field() error handling
synth_field_size() returns either a positive size or an error (zero or a negative value). However, the existing code assumes the only error value is 0. It doesn't handle negative error codes, as it assigns directly to field->size (a size_t; unsigned), thereby interpreting the error code as a valid size instead. Do the test before assignment to field->size. [ [email protected]: changelog addition, first paragraph above ] Link: https://lkml.kernel.org/r/9b6946d9776b2eeb43227678158196de1c3c6e1d.1601848695.git.zanussi@kernel.org Fixes: 4b14793 (tracing: Add support for 'synthetic' events) Reviewed-by: Masami Hiramatsu <[email protected]> Tested-by: Axel Rasmussen <[email protected]> Signed-off-by: Tom Zanussi <[email protected]> Signed-off-by: Steven Rostedt (VMware) <[email protected]>
1 parent 4a4a56b commit 8fbeb52

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

kernel/trace/trace_events_synth.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ static struct synth_field *parse_synth_field(int argc, const char **argv,
465465
struct synth_field *field;
466466
const char *prefix = NULL, *field_type = argv[0], *field_name, *array;
467467
int len, ret = 0;
468+
ssize_t size;
468469

469470
if (field_type[0] == ';')
470471
field_type++;
@@ -520,11 +521,12 @@ static struct synth_field *parse_synth_field(int argc, const char **argv,
520521
field->type[len - 1] = '\0';
521522
}
522523

523-
field->size = synth_field_size(field->type);
524-
if (!field->size) {
524+
size = synth_field_size(field->type);
525+
if (size <= 0) {
525526
ret = -EINVAL;
526527
goto free;
527528
}
529+
field->size = size;
528530

529531
if (synth_field_is_string(field->type))
530532
field->is_string = true;

0 commit comments

Comments
 (0)