ovl: fix error for ovl_fill_super()
authorChengguang Xu <cgxu519@mykernel.net>
Mon, 1 Mar 2021 06:19:30 +0000 (14:19 +0800)
committerMiklos Szeredi <mszeredi@redhat.com>
Mon, 12 Apr 2021 10:00:36 +0000 (12:00 +0200)
There are some places should return -EINVAL instead of -ENOMEM in
ovl_fill_super().

[Amir] Consistently set error before checking the error condition.

Signed-off-by: Chengguang Xu <cgxu519@mykernel.net>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/super.c

index 5fcaf3a..3f6333b 100644 (file)
@@ -1981,6 +1981,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
        if (!ofs)
                goto out;
 
+       err = -ENOMEM;
        ofs->creator_cred = cred = prepare_creds();
        if (!cred)
                goto out_err;
@@ -2009,6 +2010,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
        if (!splitlower)
                goto out_err;
 
+       err = -EINVAL;
        numlower = ovl_split_lowerdirs(splitlower);
        if (numlower > OVL_MAX_STACK) {
                pr_err("too many lower directories, limit is %d\n",
@@ -2016,6 +2018,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
                goto out_err;
        }
 
+       err = -ENOMEM;
        layers = kcalloc(numlower + 1, sizeof(struct ovl_layer), GFP_KERNEL);
        if (!layers)
                goto out_err;
@@ -2042,6 +2045,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
        if (ofs->config.upperdir) {
                struct super_block *upper_sb;
 
+               err = -EINVAL;
                if (!ofs->config.workdir) {
                        pr_err("missing 'workdir'\n");
                        goto out_err;