summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorKonstantin Khlebnikov <khlebnikov@yandex-team.ru>2017-01-10 13:30:21 -0500
committerMiklos Szeredi <mszeredi@redhat.com>2017-02-07 09:47:14 -0500
commit51f8f3c4e22535933ef9aecc00e9a6069e051b57 (patch)
treeb5ca89d2ee7d508616995e9b68792fb8363e844c /fs
parente593b2bf513dd4d3fbfa0f435392eea2c7f776f0 (diff)
ovl: drop CAP_SYS_RESOURCE from saved mounter's credentials
If overlay was mounted by root then quota set for upper layer does not work because overlay now always use mounter's credentials for operations. Also overlay might deplete reserved space and inodes in ext4. This patch drops capability SYS_RESOURCE from saved credentials. This affects creation new files, whiteouts, and copy-up operations. Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Fixes: 1175b6b8d963 ("ovl: do operations on underlying file system in mounter's context") Cc: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/overlayfs/super.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index 346f668e7df0..7b2188181367 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -721,6 +721,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
721 unsigned int stacklen = 0; 721 unsigned int stacklen = 0;
722 unsigned int i; 722 unsigned int i;
723 bool remote = false; 723 bool remote = false;
724 struct cred *cred;
724 int err; 725 int err;
725 726
726 err = -ENOMEM; 727 err = -ENOMEM;
@@ -901,10 +902,13 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
901 else 902 else
902 sb->s_d_op = &ovl_dentry_operations; 903 sb->s_d_op = &ovl_dentry_operations;
903 904
904 ufs->creator_cred = prepare_creds(); 905 ufs->creator_cred = cred = prepare_creds();
905 if (!ufs->creator_cred) 906 if (!cred)
906 goto out_put_lower_mnt; 907 goto out_put_lower_mnt;
907 908
909 /* Never override disk quota limits or use reserved space */
910 cap_lower(cred->cap_effective, CAP_SYS_RESOURCE);
911
908 err = -ENOMEM; 912 err = -ENOMEM;
909 oe = ovl_alloc_entry(numlower); 913 oe = ovl_alloc_entry(numlower);
910 if (!oe) 914 if (!oe)