lkml.org 
[lkml]   [2019]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 63/65] tracing: Get trace_array reference for available_tracers files
    Date
    From: Steven Rostedt (VMware) <rostedt@goodmis.org>

    commit 194c2c74f5532e62c218adeb8e2b683119503907 upstream.

    As instances may have different tracers available, we need to look at the
    trace_array descriptor that shows the list of the available tracers for the
    instance. But there's a race between opening the file and an admin
    deleting the instance. The trace_array_get() needs to be called before
    accessing the trace_array.

    Cc: stable@vger.kernel.org
    Fixes: 607e2ea167e56 ("tracing: Set up infrastructure to allow tracers for instances")
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    kernel/trace/trace.c | 17 +++++++++++++++--
    1 file changed, 15 insertions(+), 2 deletions(-)

    --- a/kernel/trace/trace.c
    +++ b/kernel/trace/trace.c
    @@ -4152,9 +4152,14 @@ static int show_traces_open(struct inode
    if (tracing_disabled)
    return -ENODEV;

    + if (trace_array_get(tr) < 0)
    + return -ENODEV;
    +
    ret = seq_open(file, &show_traces_seq_ops);
    - if (ret)
    + if (ret) {
    + trace_array_put(tr);
    return ret;
    + }

    m = file->private_data;
    m->private = tr;
    @@ -4162,6 +4167,14 @@ static int show_traces_open(struct inode
    return 0;
    }

    +static int show_traces_release(struct inode *inode, struct file *file)
    +{
    + struct trace_array *tr = inode->i_private;
    +
    + trace_array_put(tr);
    + return seq_release(inode, file);
    +}
    +
    static ssize_t
    tracing_write_stub(struct file *filp, const char __user *ubuf,
    size_t count, loff_t *ppos)
    @@ -4192,8 +4205,8 @@ static const struct file_operations trac
    static const struct file_operations show_traces_fops = {
    .open = show_traces_open,
    .read = seq_read,
    - .release = seq_release,
    .llseek = seq_lseek,
    + .release = show_traces_release,
    };

    static ssize_t

    \
     
     \ /
      Last update: 2019-10-17 00:13    [W:2.494 / U:1.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site