aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorhujianyang <hujianyang@huawei.com>2015-01-15 00:19:21 -0500
committerMiklos Szeredi <mszeredi@suse.cz>2015-03-18 05:29:47 -0400
commit6be4506e34cf6075a1307b646e0a6c46c1c9010d (patch)
treeb7d1dd8992d90151862fcc6cdfdfda6c58e9084e /fs
parentbead55ef775f6e25a8d286c0d47030580f577bec (diff)
ovl: check lowerdir amount for non-upper mount
Recently multi-lower layer mount support allow upperdir and workdir to be omitted, then cause overlayfs can be mount with only one lowerdir directory. This action make no sense and have potential risk. This patch check the total number of lower directories to prevent mounting overlayfs with only one directory. Also, an error message is added to indicate lower directories exceed OVL_MAX_STACK limit. Signed-off-by: hujianyang <hujianyang@huawei.com> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Diffstat (limited to 'fs')
-rw-r--r--fs/overlayfs/super.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index ab3c8cb8e52d..edbb3ebcdaad 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -870,8 +870,14 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
870 870
871 err = -EINVAL; 871 err = -EINVAL;
872 stacklen = ovl_split_lowerdirs(lowertmp); 872 stacklen = ovl_split_lowerdirs(lowertmp);
873 if (stacklen > OVL_MAX_STACK) 873 if (stacklen > OVL_MAX_STACK) {
874 pr_err("overlayfs: too many lower directries, limit is %d\n",
875 OVL_MAX_STACK);
874 goto out_free_lowertmp; 876 goto out_free_lowertmp;
877 } else if (!ufs->config.upperdir && stacklen == 1) {
878 pr_err("overlayfs: at least 2 lowerdir are needed while upperdir nonexistent\n");
879 goto out_free_lowertmp;
880 }
875 881
876 stack = kcalloc(stacklen, sizeof(struct path), GFP_KERNEL); 882 stack = kcalloc(stacklen, sizeof(struct path), GFP_KERNEL);
877 if (!stack) 883 if (!stack)