linux/fs/fuse
Miklos Szeredi a4ab1eeb4f fuse: fix clearing suid, sgid for chown()
commit c01638f5d9 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 a09f99edde ("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: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: a09f99edde ("fuse: fix killing s[ug]id in setattr")
Reviewed-by: Jeff Layton <jlayton@redhat.com>
[bwh: Backported to 3.16: adjust context, indentation]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2017-02-23 03:54:43 +00:00
..
control.c fuse: add __exit to fuse_ctl_cleanup 2014-04-28 14:19:21 +02:00
cuse.c fuse: pull iov_iter initializations up 2014-05-06 17:32:51 -04:00
dev.c fuse: set stolen page uptodate 2015-03-30 11:10:41 +01:00
dir.c fuse: fix clearing suid, sgid for chown() 2017-02-23 03:54:43 +00:00
file.c fuse: fix fuse_write_end() if zero bytes were copied 2017-02-23 03:54:33 +00:00
fuse_i.h fuse: Propagate dentry down to inode_change_ok() 2017-02-23 03:53:52 +00:00
inode.c fuse: fix wrong assignment of ->flags in fuse_send_init() 2016-11-20 01:17:01 +00:00
Kconfig fuse: Move CUSE Kconfig entry from fs/Kconfig into fs/fuse/Kconfig 2013-01-17 13:08:45 +01:00
Makefile CUSE: implement CUSE - Character device in Userspace 2009-06-09 11:24:11 +02:00