public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Johannes Berg <johannes.berg@intel.com>
Subject: Re: [for-next][PATCH 08/20] tracing: Warn if a tracepoint is not set via debugfs
Date: Mon, 10 Mar 2014 20:01:34 +0000 (UTC)	[thread overview]
Message-ID: <241011797.35066.1394481694124.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <20140307151202.210588176@goodmis.org>

----- Original Message -----
> From: "Steven Rostedt" <rostedt@goodmis.org>
> To: linux-kernel@vger.kernel.org
> Cc: "Ingo Molnar" <mingo@kernel.org>, "Frederic Weisbecker" <fweisbec@gmail.com>, "Andrew Morton"
> <akpm@linux-foundation.org>, "Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>, "Johannes Berg"
> <johannes.berg@intel.com>
> Sent: Friday, March 7, 2014 10:09:28 AM
> Subject: [for-next][PATCH 08/20] tracing: Warn if a tracepoint is not set via debugfs
> 
> From: Steven Rostedt <rostedt@goodmis.org>
> 
> Tracepoints were made to allow enabling a tracepoint in a module before that
> module was loaded. When a tracepoint is enabled and it does not exist, the
> name is stored and will be enabled when the tracepoint is created.
> 
> The problem with this approach is that when a tracepoint is enabled when
> it expects to be there, it gives no warning that it does not exist.
> 
> To add salt to the wound, if a module is added and sets the FORCED flag,
> which
> can happen if it isn't signed properly, the tracepoint code will not enabled
> the tracepoints, but they will be created in the debugfs system! When a user
> goes to enable the tracepoint, the tracepoint code will not see it existing
> and will think it is to be enabled later AND WILL NOT GIVE A WARNING.
> 
> The tracing will look like it succeeded but will actually be doing nothing.
> This will cause lots of confusion and headaches for developers trying to
> figure out why they are not seeing their tracepoints.
> 
> Link: http://lkml.kernel.org/r/20140213154507.4040fb06@gandalf.local.home
> 
> Reported-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
> Reported-by: Johannes Berg <johannes.berg@intel.com>
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> ---
>  kernel/tracepoint.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
> index 0d4ef26..0058f33 100644
> --- a/kernel/tracepoint.c
> +++ b/kernel/tracepoint.c
> @@ -62,6 +62,7 @@ struct tracepoint_entry {
>  	struct hlist_node hlist;
>  	struct tracepoint_func *funcs;
>  	int refcount;	/* Number of times armed. 0 if disarmed. */
> +	int enabled;	/* Tracepoint enabled */
>  	char name[0];
>  };
>  
> @@ -237,6 +238,7 @@ static struct tracepoint_entry *add_tracepoint(const char
> *name)
>  	memcpy(&e->name[0], name, name_len);
>  	e->funcs = NULL;
>  	e->refcount = 0;
> +	e->enabled = 0;
>  	hlist_add_head(&e->hlist, head);
>  	return e;
>  }
> @@ -316,6 +318,7 @@ static void tracepoint_update_probe_range(struct
> tracepoint * const *begin,
>  		if (mark_entry) {
>  			set_tracepoint(&mark_entry, *iter,
>  					!!mark_entry->refcount);
> +			mark_entry->enabled = !!mark_entry->refcount;
>  		} else {
>  			disable_tracepoint(*iter);
>  		}
> @@ -380,6 +383,8 @@ tracepoint_add_probe(const char *name, void *probe, void
> *data)
>  int tracepoint_probe_register(const char *name, void *probe, void *data)
>  {
>  	struct tracepoint_func *old;
> +	struct tracepoint_entry *entry;
> +	int ret = 0;
>  
>  	mutex_lock(&tracepoints_mutex);
>  	old = tracepoint_add_probe(name, probe, data);
> @@ -388,9 +393,13 @@ int tracepoint_probe_register(const char *name, void
> *probe, void *data)
>  		return PTR_ERR(old);
>  	}
>  	tracepoint_update_probes();		/* may update entry */
> +	entry = get_tracepoint(name);
> +	/* Make sure the entry was enabled */
> +	if (!entry || !entry->enabled)
> +		ret = -ENODEV;

Hi Steven,

Returning -ENODEV when the probe is still registered might come as a
surprise to the caller. For instance, a caller may dynamically allocate
name, probe, and/or data, it may want to free them when
tracepoint_probe_register returns an error. But this "-ENODEV" return value
is not really an error, and the parameters passed are still used.

If we go down this route, we might want at the very least to add documentation
of tracepoint_probe_register() return values and their meaning
in a comment on top of this function (perhaps also in the header). But
even if we do so, this weird return value semantic with respect to use of the
received parameters will likely cause memory corruption at some point.

Thoughts ?

Thanks,

Mathieu

>  	mutex_unlock(&tracepoints_mutex);
>  	release_probes(old);
> -	return 0;
> +	return ret;
>  }
>  EXPORT_SYMBOL_GPL(tracepoint_probe_register);
>  
> --
> 1.8.5.3
> 
> 
> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

  reply	other threads:[~2014-03-10 20:01 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-07 15:09 [for-next][PATCH 00/20] tracing: linux-next updates Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 01/20] ftrace/x86: Run a sync after fixup on failure Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 02/20] ftrace/x86: One more missing sync after fixup of function modification failure Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 03/20] tracepoint: Do not waste memory on mods with no tracepoints Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 04/20] ftrace/x86: Have ftrace_write() return -EPERM and clean up callers Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 05/20] tracing: Move raw output code from macro to standalone function Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 06/20] tracing: Move event storage for array " Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 07/20] tracing: Use helper functions in event assignment to shrink macro size Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 08/20] tracing: Warn if a tracepoint is not set via debugfs Steven Rostedt
2014-03-10 20:01   ` Mathieu Desnoyers [this message]
2014-03-10 20:19     ` Steven Rostedt
2014-03-10 20:55       ` Mathieu Desnoyers
2014-03-11  2:41     ` Frank Ch. Eigler
2014-03-11  2:58       ` Steven Rostedt
2014-03-11  4:08         ` Mathieu Desnoyers
2014-03-11 14:46           ` Steven Rostedt
2014-03-11 14:26         ` Frank Ch. Eigler
2014-03-11 15:06           ` Mathieu Desnoyers
2014-03-11 15:40             ` Steven Rostedt
2014-03-11 17:34               ` Mathieu Desnoyers
2014-03-11 19:13                 ` Steven Rostedt
2014-03-12 14:24                   ` Mathieu Desnoyers
2014-03-12 15:11                     ` Steven Rostedt
2014-03-12 15:46                       ` Steven Rostedt
2014-03-12 16:05                         ` Mathieu Desnoyers
2014-03-12 16:18                           ` Steven Rostedt
2014-03-12 16:39                             ` Mathieu Desnoyers
2014-03-12 17:50                               ` Steven Rostedt
2014-03-12 18:47                                 ` Mathieu Desnoyers
2014-03-12 18:58                                   ` Steven Rostedt
2014-03-12 19:30                                     ` Steven Rostedt
2014-03-12 19:58                                       ` Mathieu Desnoyers
2014-03-12 19:51                                     ` Mathieu Desnoyers
2014-03-12 20:35                                       ` Andi Kleen
2014-03-12 20:47                                         ` Mathieu Desnoyers
2014-03-13  3:15                                           ` Andi Kleen
2014-03-13  3:21                                             ` Mathieu Desnoyers
2014-03-13  0:49                                       ` Steven Rostedt
2014-03-13  3:10                                         ` Mathieu Desnoyers
2014-03-13 15:24                                           ` Mathieu Desnoyers
2014-03-12 16:40                       ` Mathieu Desnoyers
2014-03-12 18:02                         ` Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 09/20] tracing: Fix event header writeback.h to include tracepoint.h Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 10/20] tracing: Fix event header migrate.h " Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 11/20] tracing/module: Replace include of tracepoint.h with jump_label.h in module.h Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 12/20] tracing: Correctly expand len expressions from __dynamic_array macro Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 13/20] tracing: Evaluate len expression only once in " Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 14/20] ftrace: Cleanup of global variables ftrace_new_pgs and ftrace_update_cnt Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 15/20] ftrace: Inline the code from ftrace_dyn_table_alloc() Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 16/20] ftrace: Pass retval through return in ftrace_dyn_arch_init() Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 17/20] ftrace: Do not pass data to ftrace_dyn_arch_init Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 18/20] ftrace: Remove freelist from struct dyn_ftrace Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 19/20] ftrace: Warn on error when modifying ftrace function Steven Rostedt
2014-03-07 15:09 ` [for-next][PATCH 20/20] ftrace/x86: BUG when ftrace recovery fails Steven Rostedt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=241011797.35066.1394481694124.JavaMail.zimbra@efficios.com \
    --to=mathieu.desnoyers@efficios.com \
    --cc=akpm@linux-foundation.org \
    --cc=fweisbec@gmail.com \
    --cc=johannes.berg@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox