linux/fs
Jan Kara 030b533c4f fs: Avoid premature clearing of capabilities
Currently, notify_change() clears capabilities or IMA attributes by
calling security_inode_killpriv() before calling into ->setattr. Thus it
happens before any other permission checks in inode_change_ok() and user
is thus allowed to trigger clearing of capabilities or IMA attributes
for any file he can look up e.g. by calling chown for that file. This is
unexpected and can lead to user DoSing a system.

Fix the problem by calling security_inode_killpriv() at the end of
inode_change_ok() instead of from notify_change(). At that moment we are
sure user has permissions to do the requested change.

References: CVE-2015-1350
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
2016-09-22 10:56:19 +02:00
..
9p fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
adfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
affs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
afs rxrpc: Limit the listening backlog 2016-06-10 18:14:47 -07:00
autofs4 Merge branch 'work.const-qstr' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-08-06 09:49:02 -04:00
befs
bfs
btrfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
cachefiles cachefiles: Fix race between inactivating and culling a cache object 2016-08-03 13:33:26 -04:00
ceph fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
cifs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
coda drop redundant ->owner initializations 2016-05-29 19:08:00 -04:00
configfs configfs: don't set buffer_needs_fill to zero if show() returns error 2016-07-10 21:02:18 +09:00
cramfs
crypto block, fs, mm, drivers: use bio set/get op accessors 2016-06-07 13:41:38 -06:00
debugfs Merge branch 'd_real' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs into work.misc 2016-06-30 23:34:49 -04:00
devpts userns: Remove the now unnecessary FS_USERNS_DEV_MOUNT flag 2016-06-23 15:47:31 -05:00
dlm dlm: Use kmemdup instead of kmalloc and memcpy 2016-06-23 11:55:58 -05:00
ecryptfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
efivarfs get rid of 'parent' argument of ->d_compare() 2016-07-31 16:37:25 -04:00
efs
exofs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
exportfs
ext2 fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
ext4 fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
f2fs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
fat fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
freevxfs freevxfs: update Kconfig information 2016-06-13 10:20:39 +02:00
fscache Merge branch 'd_real' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs into work.misc 2016-06-30 23:34:49 -04:00
fuse fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
gfs2 fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
hfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
hfsplus fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
hostfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
hpfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
hugetlbfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
isofs get rid of 'parent' argument of ->d_compare() 2016-07-31 16:37:25 -04:00
jbd2 The major change this cycle is deleting ext4's copy of the file system 2016-07-26 18:35:55 -07:00
jffs2 fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
jfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
kernfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
lockd Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-07-28 12:59:05 -07:00
logfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
minix fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
ncpfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
nfs Merge branch 'work.const-qstr' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-08-06 09:49:02 -04:00
nfs_common
nfsd fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
nilfs2 fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
nls
notify
ntfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
ocfs2 fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
omfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
openpromfs
orangefs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
overlayfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
proc fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
pstore ramoops: use persistent_ram_free() instead of kfree() for freeing prz 2016-08-05 11:21:46 -07:00
qnx4
qnx6
quota quota: fill in Q_XGETQSTAT inode information for inactive quotas 2016-08-15 17:43:31 +02:00
ramfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
reiserfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
romfs
squashfs fs: have ll_rw_block users pass in op and flags separately 2016-06-07 13:41:38 -06:00
sysfs kernfs: The cgroup filesystem also benefits from SB_I_NOEXEC 2016-06-23 15:41:56 -05:00
sysv fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
tracefs tracefs: ->d_parent is never NULL or negative... 2016-05-29 16:22:07 -04:00
ubifs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
udf fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
ufs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
xfs fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
aio.c aio: make aio_setup_ring killable 2016-05-23 17:04:14 -07:00
anon_inodes.c
attr.c fs: Avoid premature clearing of capabilities 2016-09-22 10:56:19 +02:00
bad_inode.c switch ->setxattr() to passing dentry and inode separately 2016-05-27 20:09:16 -04:00
binfmt_aout.c fs: fix binfmt_aout.c build error 2016-05-28 16:34:59 -07:00
binfmt_elf_fdpic.c elf_fdpic_transfer_args_to_stack(): make it generic 2016-07-25 16:51:49 +10:00
binfmt_elf.c binfmt_elf: fix calculations for bss padding 2016-08-02 19:35:14 -04:00
binfmt_em86.c fs/binfmt_em86.c: fix incompatible pointer type 2016-08-02 19:35:15 -04:00
binfmt_flat.c binfmt_flat: allow compressed flat binary format to work on MMU systems 2016-07-28 13:29:12 +10:00
binfmt_misc.c binfmt_misc for-linus on 20160727 2016-08-07 10:13:14 -04:00
binfmt_script.c
block_dev.c block/mm: make bdev_ops->rw_page() take a bool for read/write 2016-08-07 14:41:02 -06:00
buffer.c xfs: update for 4.8-rc1 2016-07-27 09:53:35 -07:00
char_dev.c chardev: add missing line break in pr_warn 2016-07-14 16:21:53 +09:00
compat_binfmt_elf.c
compat_ioctl.c [media] cec: add compat32 ioctl support 2016-06-28 10:00:13 -03:00
compat.c Fix a number of bugs, most notably a potential stale data exposure 2016-05-24 12:55:26 -07:00
coredump.c coredump: fix dumping through pipes 2016-06-07 22:07:09 -04:00
dax.c libnvdimm for 4.8 2016-07-28 17:38:16 -07:00
dcache.c Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-08-07 10:01:14 -04:00
dcookies.c
direct-io.c direct-io: use bio set/get op accessors 2016-06-07 13:41:38 -06:00
drop_caches.c
eventfd.c
eventpoll.c
exec.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2016-08-04 18:04:44 -04:00
fcntl.c
fhandle.c
file_table.c
file.c
filesystems.c
fs_pin.c
fs_struct.c
fs-writeback.c writeback: Write dirty times for WB_SYNC_ALL writeback 2016-08-04 14:19:16 -06:00
inode.c Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-08-07 10:01:14 -04:00
internal.h binfmt_misc for-linus on 20160727 2016-08-07 10:13:14 -04:00
ioctl.c vfs: ioctl: prevent double-fetch in dedupe ioctl 2016-07-28 15:23:12 -07:00
iomap.c fs: iomap based fiemap implementation 2016-06-21 09:38:45 +10:00
Kconfig Highlights: 2016-08-04 19:59:06 -04:00
Kconfig.binfmt m68k: enable binfmt_flat on systems with an MMU 2016-07-28 13:29:13 +10:00
libfs.c fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
locks.c locks: use file_inode() 2016-07-01 10:24:18 -04:00
Makefile fs: introduce iomap infrastructure 2016-06-21 09:23:11 +10:00
mbcache.c
mount.h
mpage.c block/mm: make bdev_ops->rw_page() take a bool for read/write 2016-08-07 14:41:02 -06:00
namei.c fs: return EPERM on immutable inode 2016-08-07 10:03:31 -04:00
namespace.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2016-07-29 15:54:19 -07:00
no-block.c
nsfs.c
open.c binfmt_misc for-linus on 20160727 2016-08-07 10:13:14 -04:00
pipe.c pipe: account to kmemcg 2016-07-26 16:19:19 -07:00
pnode.c
pnode.h
posix_acl.c posix_acl: Clear SGID bit when setting file permissions 2016-09-22 10:55:32 +02:00
proc_namespace.c
read_write.c x86/syscalls: Add compat_sys_preadv64v2/compat_sys_pwritev64v2 2016-07-15 10:30:26 +02:00
readdir.c restore killability of old mutex_lock_killable(&inode->i_mutex) users 2016-05-26 00:13:25 -04:00
select.c
seq_file.c
signalfd.c
splice.c
stack.c
stat.c
statfs.c
super.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2016-07-29 15:54:19 -07:00
sync.c
timerfd.c timerfd: Reject ALARM timerfds without CAP_WAKE_ALARM 2016-06-09 23:42:38 +02:00
userfaultfd.c mm: introduce fault_env 2016-07-26 16:19:19 -07:00
utimes.c fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
xattr.c vfs: Don't modify inodes with a uid or gid unknown to the vfs 2016-07-05 15:06:46 -05:00