lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 738/775] f2fs: enforce the immutable flag on open files
    Date
    From: Chao Yu <yuchao0@huawei.com>

    commit e0fcd01510ad025c9bbce704c5c2579294056141 upstream.

    This patch ports commit 02b016ca7f99 ("ext4: enforce the immutable
    flag on open files") to f2fs.

    According to the chattr man page, "a file with the 'i' attribute
    cannot be modified..." Historically, this was only enforced when the
    file was opened, per the rest of the description, "... and the file
    can not be opened in write mode".

    There is general agreement that we should standardize all file systems
    to prevent modifications even for files that were opened at the time
    the immutable flag is set. Eventually, a change to enforce this at
    the VFS layer should be landing in mainline.

    Cc: stable@kernel.org
    Signed-off-by: Chao Yu <yuchao0@huawei.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/f2fs/file.c | 17 +++++++++++++++++
    1 file changed, 17 insertions(+)

    --- a/fs/f2fs/file.c
    +++ b/fs/f2fs/file.c
    @@ -60,6 +60,9 @@ static vm_fault_t f2fs_vm_page_mkwrite(s
    bool need_alloc = true;
    int err = 0;

    + if (unlikely(IS_IMMUTABLE(inode)))
    + return VM_FAULT_SIGBUS;
    +
    if (unlikely(f2fs_cp_error(sbi))) {
    err = -EIO;
    goto err;
    @@ -870,6 +873,14 @@ int f2fs_setattr(struct dentry *dentry,
    if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
    return -EIO;

    + if (unlikely(IS_IMMUTABLE(inode)))
    + return -EPERM;
    +
    + if (unlikely(IS_APPEND(inode) &&
    + (attr->ia_valid & (ATTR_MODE | ATTR_UID |
    + ATTR_GID | ATTR_TIMES_SET))))
    + return -EPERM;
    +
    if ((attr->ia_valid & ATTR_SIZE) &&
    !f2fs_is_compress_backend_ready(inode))
    return -EOPNOTSUPP;
    @@ -4356,6 +4367,11 @@ static ssize_t f2fs_file_write_iter(stru
    inode_lock(inode);
    }

    + if (unlikely(IS_IMMUTABLE(inode))) {
    + ret = -EPERM;
    + goto unlock;
    + }
    +
    ret = generic_write_checks(iocb, from);
    if (ret > 0) {
    bool preallocated = false;
    @@ -4420,6 +4436,7 @@ write:
    if (ret > 0)
    f2fs_update_iostat(F2FS_I_SB(inode), APP_WRITE_IO, ret);
    }
    +unlock:
    inode_unlock(inode);
    out:
    trace_f2fs_file_write_iter(inode, iocb->ki_pos,

    \
     
     \ /
      Last update: 2021-03-02 14:39    [W:2.477 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site