lkml.org 
[lkml]   [2018]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 24/54] Fix up non-directory creation in SGID directories
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

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

    From: Linus Torvalds <torvalds@linux-foundation.org>

    commit 0fa3ecd87848c9c93c2c828ef4c3a8ca36ce46c7 upstream.

    sgid directories have special semantics, making newly created files in
    the directory belong to the group of the directory, and newly created
    subdirectories will also become sgid. This is historically used for
    group-shared directories.

    But group directories writable by non-group members should not imply
    that such non-group members can magically join the group, so make sure
    to clear the sgid bit on non-directories for non-members (but remember
    that sgid without group execute means "mandatory locking", just to
    confuse things even more).

    Reported-by: Jann Horn <jannh@google.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/inode.c | 6 ++++++
    1 file changed, 6 insertions(+)

    --- a/fs/inode.c
    +++ b/fs/inode.c
    @@ -2006,8 +2006,14 @@ void inode_init_owner(struct inode *inod
    inode->i_uid = current_fsuid();
    if (dir && dir->i_mode & S_ISGID) {
    inode->i_gid = dir->i_gid;
    +
    + /* Directories are special, and always inherit S_ISGID */
    if (S_ISDIR(mode))
    mode |= S_ISGID;
    + else if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP) &&
    + !in_group_p(inode->i_gid) &&
    + !capable_wrt_inode_uidgid(dir, CAP_FSETID))
    + mode &= ~S_ISGID;
    } else
    inode->i_gid = current_fsgid();
    inode->i_mode = mode;

    \
     
     \ /
      Last update: 2018-07-16 09:52    [W:3.098 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site