lkml.org 
[lkml]   [2018]   [Aug]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 011/107] root dentries need RCU-delayed freeing
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Al Viro <viro@zeniv.linux.org.uk>

    commit 90bad5e05bcdb0308cfa3d3a60f5c0b9c8e2efb3 upstream.

    Since mountpoint crossing can happen without leaving lazy mode,
    root dentries do need the same protection against having their
    memory freed without RCU delay as everything else in the tree.

    It's partially hidden by RCU delay between detaching from the
    mount tree and dropping the vfsmount reference, but the starting
    point of pathwalk can be on an already detached mount, in which
    case umount-caused RCU delay has already passed by the time the
    lazy pathwalk grabs rcu_read_lock(). If the starting point
    happens to be at the root of that vfsmount *and* that vfsmount
    covers the entire filesystem, we get trouble.

    Fixes: 48a066e72d97 ("RCU'd vsfmounts")
    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/dcache.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    --- a/fs/dcache.c
    +++ b/fs/dcache.c
    @@ -1914,10 +1914,12 @@ struct dentry *d_make_root(struct inode

    if (root_inode) {
    res = __d_alloc(root_inode->i_sb, NULL);
    - if (res)
    + if (res) {
    + res->d_flags |= DCACHE_RCUACCESS;
    d_instantiate(res, root_inode);
    - else
    + } else {
    iput(root_inode);
    + }
    }
    return res;
    }

    \
     
     \ /
      Last update: 2018-08-14 19:59    [W:4.072 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site