From: Namhyung Kim <namhyung@kernel.org>
To: Arianna Avanzini <avanzini.arianna@gmail.com>
Cc: rostedt@goodmis.org, mingo@redhat.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH RFC] trace, blktrace: remove trace from running list only if trace is running
Date: Mon, 10 Nov 2014 17:25:56 +0900 [thread overview]
Message-ID: <8761env4vf.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <1415459680-1749-1-git-send-email-avanzini.arianna@gmail.com> (Arianna Avanzini's message of "Sat, 8 Nov 2014 16:14:40 +0100")
Hi Arianna,
On Sat, 8 Nov 2014 16:14:40 +0100, Arianna Avanzini wrote:
> Currently, blktrace can be started/stopped via its ioctl-based interface
> (used by the userspace blktrace tool) or via its ftrace interface. The
> function blk_trace_remove_queue(), called each time an "enable" tunable
> of the ftrace interface transitions to zero, removes unconditionally the
> trace from the running list, even if its state is not Blktrace_running.
> In fact, the state of a blk_trace is modified only by the ioctl-based
> interface, and a blk_trace is added to the running list only when its
> state transitions from Blktrace_setup or Blktrace_stopped to
> Blktrace_running. If the ioctl-based interface is not being used, the
> state of the blk_trace is undefined.
> In this case, using the sysfs tunable to stop a trace would trigger a
> removal of a blk_trace from the running list while it is not on such a
> list, leading to a null pointer dereference. This commit attempts to fix
> the issue by letting the blk_trace_remove_queue() function remove the
> blk_trace from the running list only if its state is Blktrace_running.
What about just getting rid of the list_del()? blk_trace_setup_queue()
doesn't add it to running_trace_list and I think we should prevent mix
of ioctl and sysfs usage somehow..
Thanks,
Namhyung
>
> Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
> ---
> kernel/trace/blktrace.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
> index c1bd4ad..f58b617 100644
> --- a/kernel/trace/blktrace.c
> +++ b/kernel/trace/blktrace.c
> @@ -1493,9 +1493,11 @@ static int blk_trace_remove_queue(struct request_queue *q)
> if (atomic_dec_and_test(&blk_probes_ref))
> blk_unregister_tracepoints();
>
> - spin_lock_irq(&running_trace_lock);
> - list_del(&bt->running_list);
> - spin_unlock_irq(&running_trace_lock);
> + if (bt->trace_state == Blktrace_running) {
> + spin_lock_irq(&running_trace_lock);
> + list_del(&bt->running_list);
> + spin_unlock_irq(&running_trace_lock);
> + }
> blk_trace_free(bt);
> return 0;
> }
next prev parent reply other threads:[~2014-11-10 8:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-08 15:14 [PATCH RFC] trace, blktrace: remove trace from running list only if trace is running Arianna Avanzini
2014-11-10 8:25 ` Namhyung Kim [this message]
2014-11-10 10:40 ` Arianna Avanzini
2014-11-10 10:40 ` [PATCH RFC v2] trace, blktrace: don't let the sysfs interface remove trace from running list Arianna Avanzini
2014-11-14 2:07 ` Steven Rostedt
2014-12-09 22:00 ` Jens Axboe
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=8761env4vf.fsf@sejong.aot.lge.com \
--to=namhyung@kernel.org \
--cc=avanzini.arianna@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.