lkml.org 
[lkml]   [2018]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.15 192/202] ovl: force r/o mount when index dir creation fails
    Date
    4.15-stable review patch.  If anyone has any objections, please let me know.

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

    From: Amir Goldstein <amir73il@gmail.com>

    commit 972d0093c2f7b1bd57e47a1780a552dde528fd16 upstream.

    When work dir creation fails, a warning is emitted and overlay is
    mounted r/o. Trying to remount r/w will fail with no work dir.

    When index dir creation fails, the same warning is emitted and overlay
    is mounted r/o, but trying to remount r/w will succeed. This may cause
    unintentional corruption of filesystem consistency.

    Adjust the behavior of index dir creation failure to that of work dir
    creation failure and do not allow to remount r/w. User needs to state
    an explicitly intention to work without an index by mounting with
    option 'index=off' to allow r/w mount with no index dir.

    When mounting with option 'index=on' and no 'upperdir', index is
    implicitly disabled, so do not warn about no file handle support.

    The issue was introduced with inodes index feature in v4.13, but this
    patch will not apply cleanly before ovl_fill_super() re-factoring in
    v4.15.

    Fixes: 02bcd1577400 ("ovl: introduce the inodes index dir feature")
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/overlayfs/super.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    --- a/fs/overlayfs/super.c
    +++ b/fs/overlayfs/super.c
    @@ -703,7 +703,8 @@ static int ovl_lower_dir(const char *nam
    * The inodes index feature needs to encode and decode file
    * handles, so it requires that all layers support them.
    */
    - if (ofs->config.index && !ovl_can_decode_fh(path->dentry->d_sb)) {
    + if (ofs->config.index && ofs->config.upperdir &&
    + !ovl_can_decode_fh(path->dentry->d_sb)) {
    ofs->config.index = false;
    pr_warn("overlayfs: fs on '%s' does not support file handles, falling back to index=off.\n", name);
    }
    @@ -1257,11 +1258,16 @@ static int ovl_fill_super(struct super_b
    if (err)
    goto out_free_oe;

    - if (!ofs->indexdir)
    + /* Force r/o mount with no index dir */
    + if (!ofs->indexdir) {
    + dput(ofs->workdir);
    + ofs->workdir = NULL;
    sb->s_flags |= SB_RDONLY;
    + }
    +
    }

    - /* Show index=off/on in /proc/mounts for any of the reasons above */
    + /* Show index=off in /proc/mounts for forced r/o mount */
    if (!ofs->indexdir)
    ofs->config.index = false;


    \
     
     \ /
      Last update: 2018-02-15 16:55    [W:4.036 / U:0.536 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site