diff options
author | Li Zefan <lizf@cn.fujitsu.com> | 2009-06-24 09:52:29 +0800 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-06-24 11:02:49 +0200 |
commit | e1c7e2a6e67fe9db19dd15e71614526a31b5fdb1 (patch) | |
tree | 0b6eb8cf5e699592fc868a44b24e603ad8f3d6af /kernel/trace/trace_printk.c | |
parent | 4e8a2372f9255a1464ef488ed925455f53fbdaa1 (diff) | |
download | lwn-e1c7e2a6e67fe9db19dd15e71614526a31b5fdb1.tar.gz lwn-e1c7e2a6e67fe9db19dd15e71614526a31b5fdb1.zip |
tracing/events: Don't increment @pos in s_start()
While testing syscall tracepoints posted by Jason, I found 3 entries
were missing when reading available_events. The output size of
available_events is < 4 pages, which means we lost 1 entry per page.
The cause is, it's wrong to increment @pos in s_start().
Actually there's another bug here -- reading avaiable_events/set_events
can race with module unload:
# cat available_events |
s_start() |
s_stop() |
| # rmmod foo.ko
s_start() |
call = list_entry(m->private) |
@call might be freed and accessing it will lead to crash.
Reviewed-by: Liming Wang <liming.wang@windriver.com>
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <4A4186DD.6090405@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace_printk.c')
0 files changed, 0 insertions, 0 deletions