diff options
| author | 2018-08-06 12:45:42 +0200 | |
|---|---|---|
| committer | 2018-08-06 12:45:42 +0200 | |
| commit | 9e90c7985229430428dc9ba0ec7fe422901b456d (patch) | |
| tree | cae2072feba8cc433a32d96568bbcf36070bd6e5 /fs/inode.c | |
| parent | genirq/irqchip: Remove MULTI_IRQ_HANDLER as it's now obselete (diff) | |
| parent | irqchip/gic-v3-its: Make its_lock a raw_spin_lock_t (diff) | |
| download | wireguard-linux-9e90c7985229430428dc9ba0ec7fe422901b456d.tar.xz wireguard-linux-9e90c7985229430428dc9ba0ec7fe422901b456d.zip | |
Merge tag 'irqchip-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core
Pull irqchip updates from Marc Zyngier:
- GICv3 ITS LPI allocation revamp
- GICv3 support for hypervisor-enforced LPI range
- GICv3 ITS conversion to raw spinlock
Diffstat (limited to 'fs/inode.c')
| -rw-r--r-- | fs/inode.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/inode.c b/fs/inode.c index 2c300e981796..8c86c809ca17 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -1999,8 +1999,14 @@ void inode_init_owner(struct inode *inode, const struct inode *dir, 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; |
