public inbox for kernel-janitors@vger.kernel.org
 help / color / mirror / Atom feed
* re: tracing: Make tracer_flags use the right set_flag callback
@ 2016-03-10 19:44 Dan Carpenter
  2016-03-11 11:50 ` Chunyu Hu
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Dan Carpenter @ 2016-03-10 19:44 UTC (permalink / raw)
  To: kernel-janitors

Hello Chunyu Hu,

The patch d39cdd2036a6: "tracing: Make tracer_flags use the right
set_flag callback" from Mar 8, 2016, leads to the following
Smatch warning:

kernel/trace/trace.c:1303 register_tracer()
warn: inconsistent returns 'mutex:&trace_types_lock'.
  Locked on:   line 1260
  Unlocked on: line 1232
               line 1237
               line 1303


kernel/trace/trace.c
  1253  
  1254          if (!type->set_flag)
  1255                  type->set_flag = &dummy_set_flag;
  1256          if (!type->flags) {
  1257                  /*allocate a dummy tracer_flags*/
  1258                  type->flags = kmalloc(sizeof(*type->flags), GFP_KERNEL);
  1259                  if (!type->flags)
  1260                          return -ENOMEM;

Should probably be a goto out.

  1261                  type->flags->val = 0;
  1262                  type->flags->opts = dummy_tracer_opt;
  1263          } else
  1264                  if (!type->flags->opts)
  1265                          type->flags->opts = dummy_tracer_opt;
  1266  
  1267          /* store the tracer for __set_tracer_option */
  1268          type->flags->trace = type;
  1269  
  1270          ret = run_tracer_selftest(type);
  1271          if (ret < 0)
  1272                  goto out;
  1273  
  1274          type->next = trace_types;
  1275          trace_types = type;
  1276          add_tracer_options(&global_trace, type);
  1277  
  1278   out:
  1279          tracing_selftest_running = false;
  1280          mutex_unlock(&trace_types_lock);
  1281  
  1282          if (ret || !default_bootup_tracer)
  1283                  goto out_unlock;

It's weird that goto out_unlock doesn't unlock.


  1284  

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: tracing: Make tracer_flags use the right set_flag callback
  2016-03-10 19:44 tracing: Make tracer_flags use the right set_flag callback Dan Carpenter
@ 2016-03-11 11:50 ` Chunyu Hu
  2016-03-11 14:31 ` Steven Rostedt
  2016-03-14  8:42 ` Dan Carpenter
  2 siblings, 0 replies; 4+ messages in thread
From: Chunyu Hu @ 2016-03-11 11:50 UTC (permalink / raw)
  To: kernel-janitors



----- Original Message -----
> From: "Dan Carpenter" <dan.carpenter@oracle.com>
> To: chuhu@redhat.com
> Cc: "Steven Rostedt" <rostedt@goodmis.org>, "Ingo Molnar" <mingo@redhat.com>, kernel-janitors@vger.kernel.org
> Sent: Friday, March 11, 2016 3:44:03 AM
> Subject: re: tracing: Make tracer_flags use the right set_flag callback
> 
> Hello Chunyu Hu,
> 
> The patch d39cdd2036a6: "tracing: Make tracer_flags use the right
> set_flag callback" from Mar 8, 2016, leads to the following
> Smatch warning:
> 
> kernel/trace/trace.c:1303 register_tracer()
> warn: inconsistent returns 'mutex:&trace_types_lock'.
>   Locked on:   line 1260
>   Unlocked on: line 1232
>                line 1237
>                line 1303
> 
> 
> kernel/trace/trace.c
>   1253
>   1254          if (!type->set_flag)
>   1255                  type->set_flag = &dummy_set_flag;
>   1256          if (!type->flags) {
>   1257                  /*allocate a dummy tracer_flags*/
>   1258                  type->flags = kmalloc(sizeof(*type->flags),
>   GFP_KERNEL);
>   1259                  if (!type->flags)
>   1260                          return -ENOMEM;
> 
> Should probably be a goto out.

Hi Dan,

Thanks so much for catching this. I missed this check. I was just
thinking that this fail was nearly impossible, and during my tests
I didn't hit any warn, so i missed this. You taught me a lesson. 
BTW, How did you hit the warn? a special gcc version / feature?

You are right, It should be a 'goto out', this has already tested by me.
 
                          if (!type->flags) {
                                  ret = -ENOMEM;
                                  goto out;
                          }

Hi Steve,
I'm so sorry for this. Can I resubmit a v2 for my part of the patch?


>   1261                  type->flags->val = 0;
>   1262                  type->flags->opts = dummy_tracer_opt;
>   1263          } else
>   1264                  if (!type->flags->opts)
>   1265                          type->flags->opts = dummy_tracer_opt;
>   1266
>   1267          /* store the tracer for __set_tracer_option */
>   1268          type->flags->trace = type;
>   1269
>   1270          ret = run_tracer_selftest(type);
>   1271          if (ret < 0)
>   1272                  goto out;
>   1273
>   1274          type->next = trace_types;
>   1275          trace_types = type;
>   1276          add_tracer_options(&global_trace, type);
>   1277
>   1278   out:
>   1279          tracing_selftest_running = false;
>   1280          mutex_unlock(&trace_types_lock);
>   1281
>   1282          if (ret || !default_bootup_tracer)
>   1283                  goto out_unlock;
> 
> It's weird that goto out_unlock doesn't unlock.

looks like exchange the name of out and out_unlock will make 
it more readable, but seems also needs a bit further cleanup,
as the 'out' part will startup an bootup tracing if a kenrel
parameter 'ftrace=one of the tracer' is defined in cmdline.  

>   1284
> 
> regards,
> dan carpenter
> 

-- 
Regards,
Chunyu Hu


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: tracing: Make tracer_flags use the right set_flag callback
  2016-03-10 19:44 tracing: Make tracer_flags use the right set_flag callback Dan Carpenter
  2016-03-11 11:50 ` Chunyu Hu
@ 2016-03-11 14:31 ` Steven Rostedt
  2016-03-14  8:42 ` Dan Carpenter
  2 siblings, 0 replies; 4+ messages in thread
From: Steven Rostedt @ 2016-03-11 14:31 UTC (permalink / raw)
  To: kernel-janitors

On Fri, 11 Mar 2016 06:50:07 -0500 (EST)
Chunyu Hu <chuhu@redhat.com> wrote:


> Thanks so much for catching this. I missed this check. I was just
> thinking that this fail was nearly impossible, and during my tests
> I didn't hit any warn, so i missed this. You taught me a lesson. 
> BTW, How did you hit the warn? a special gcc version / feature?
> 
> You are right, It should be a 'goto out', this has already tested by me.
>  
>                           if (!type->flags) {
>                                   ret = -ENOMEM;
>                                   goto out;
>                           }
> 
> Hi Steve,
> I'm so sorry for this. Can I resubmit a v2 for my part of the patch?
> 

What I push to linux-next doesn't get rebased. Please just send a patch
to fix this on top of what's already in my for-next branch.

Thanks!


-- Steve

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: tracing: Make tracer_flags use the right set_flag callback
  2016-03-10 19:44 tracing: Make tracer_flags use the right set_flag callback Dan Carpenter
  2016-03-11 11:50 ` Chunyu Hu
  2016-03-11 14:31 ` Steven Rostedt
@ 2016-03-14  8:42 ` Dan Carpenter
  2 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2016-03-14  8:42 UTC (permalink / raw)
  To: kernel-janitors

On Fri, Mar 11, 2016 at 06:50:07AM -0500, Chunyu Hu wrote:
> Thanks so much for catching this. I missed this check. I was just
> thinking that this fail was nearly impossible, and during my tests
> I didn't hit any warn, so i missed this. You taught me a lesson. 
> BTW, How did you hit the warn? a special gcc version / feature?

This is a Smatch thing.

https://blogs.oracle.com/linuxkernel/entry/smatch_static_analysis_tool_overview

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-03-14  8:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-10 19:44 tracing: Make tracer_flags use the right set_flag callback Dan Carpenter
2016-03-11 11:50 ` Chunyu Hu
2016-03-11 14:31 ` Steven Rostedt
2016-03-14  8:42 ` Dan Carpenter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox