• Miklos Szeredi's avatar
    fuse: fix clearing suid, sgid for chown() · a4ab1eeb
    Miklos Szeredi authored
    commit c01638f5 upstream.
    
    Basically, the pjdfstests set the ownership of a file to 06555, and then
    chowns it (as root) to a new uid/gid. Prior to commit a09f99ed ("fuse:
    fix killing s[ug]id in setattr"), fuse would send down a setattr with both
    the uid/gid change and a new mode.  Now, it just sends down the uid/gid
    change.
    
    Technically this is NOTABUG, since POSIX doesn't _require_ that we clear
    these bits for a privileged process, but Linux (wisely) has done that and I
    think we don't want to change that behavior here.
    
    This is caused by the use of should_remove_suid(), which will always return
    0 when the process has CAP_FSETID.
    
    In fact we really don't need to be calling should_remove_suid() at all,
    since we've already been indicated that we should remove the suid, we just
    don't want to use a (very) stale mode for that.
    
    This patch should fix the above as well as simplify the logic.
    Reported-by: default avatarJeff Layton <jlayton@redhat.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    Fixes: a09f99ed ("fuse: fix killing s[ug]id in setattr")
    Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
    [bwh: Backported to 3.16: adjust context, indentation]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    a4ab1eeb
dir.c 51.9 KB