On Wed, Dec 04, 2019 at 09:26:40AM -0500, Steven Rostedt wrote: > On Tue, 26 Nov 2019 15:19:34 +0300 > Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote: > > > Smatch complains that "ret" could be uninitialized if we don't enter the > > loop. I don't know if that's possible, but it's nicer to return a > > literal zero instead. > > > > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > > --- > > kernel/trace/trace_syscalls.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c > > index 73140d80dd46..63528f458826 100644 > > --- a/kernel/trace/trace_syscalls.c > > +++ b/kernel/trace/trace_syscalls.c > > @@ -286,7 +286,7 @@ static int __init syscall_enter_define_fields(struct trace_event_call *call) > > offset += sizeof(unsigned long); > > } > > > > - return ret; > > + return 0; > > } > > > > static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id) > > The current code has this: > > static int __init syscall_enter_define_fields(struct trace_event_call *call) > { > struct syscall_trace_enter trace; > struct syscall_metadata *meta = call->data; > int ret; > int i; > int offset = offsetof(typeof(trace), args); > > ret = trace_define_field(call, SYSCALL_FIELD(int, nr, __syscall_nr), > FILTER_OTHER); In linux-next this ret = trace_define_field() assignment is removed. That was commit 60fdad00827c ("ftrace: Rework event_create_dir()"). > if (ret) > return ret; > > for (i = 0; i < meta->nb_args; i++) { > ret = trace_define_field(call, meta->types[i], > meta->args[i], offset, > sizeof(unsigned long), 0, > FILTER_OTHER); > offset += sizeof(unsigned long); > } > > return ret; > } > > > How can ret possibly be uninitialized? I should have written this commit more carefully and verified whether meta->nb_args can actually be zero instead of just assuming it was a false positive... regards, dan carpenter