From nobody Fri Dec 19 22:02:48 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5CC07130AEB; Sun, 24 Mar 2024 23:02:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711321366; cv=none; b=Zyvu84Elh8WAHtvWVHrpju0D0/+hwVCpehtDdK4Nmlxe54qWgK5w/O0ofCem22p2kTXDmEXhZ8wD5aJNzfEzbYD14vlMwc9FGzCBFAFGXTFP0VENd4PDEwLAaPlTeaAEx3X+hR6wJ0fMg1yHbDk32EARI03wMlqdI46619aRNoE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711321366; c=relaxed/simple; bh=i0oQUREjAqNwxGyvagSKI/3J+uyjgN2fidxYHn5b9EM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AakM9PWDyUi8pRwLtWZXvsTeVMmDQvEO9RKs48AUxrQgOxiJpMRLmtjT3Wlf5iTRsgxQVQ2JjBWnrhjTw8eLUq+yXJ0LzUurT9JTpyacAIZi675fsMVHoL8k8MGHP2X/2t4hFO7TQ9svkfkO8LrAV1c+nhmRsI0f74Z1zrAawjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=B6Rz501K; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="B6Rz501K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 52775C433C7; Sun, 24 Mar 2024 23:02:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711321365; bh=i0oQUREjAqNwxGyvagSKI/3J+uyjgN2fidxYHn5b9EM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=B6Rz501KoCtNIxUtLGE0TmzUs2ogElHSbL9e6FpQHiD1nLFZnkYnXM2URSEGfbHAu jxZxg0XRLbo9fOCSmxsOfKdY+Iv73VqGyf6H5l28qQsFVX+PT4EU5JjQQKY86NigRx yix/Ly8uz6q9U753De63lTogFvIed4wGXe9cbS4KmcS4kbEKlNcTQwDa4QiUA0pZ66 ZPIybxw8GuLq8fZ5MyXD2obt5P5AoSuvN5hlUfLhZLdb4KvFMQiYa49asy60q0fZtR a7OtsHYTQhJHpPGfYrXKVnhkiHw801lEKUNVNOeW7DLiybP3mLamBfxJCzfZm92m6B fGLLGHh9vILPA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Amir Goldstein , Sasha Levin Subject: [PATCH 6.6 089/638] ovl: remove unused code in lowerdir param parsing Date: Sun, 24 Mar 2024 18:52:06 -0400 Message-ID: <20240324230116.1348576-90-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240324230116.1348576-1-sashal@kernel.org> References: <20240324230116.1348576-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Amir Goldstein [ Upstream commit c835110b588a750650988ca5000913c3c60d246b ] Commit beae836e9c61 ("ovl: temporarily disable appending lowedirs") removed the ability to append lowerdirs with syntax lowerdir=3D":". Remove leftover code and comments that are irrelevant with lowerdir append mode disabled. Signed-off-by: Amir Goldstein Stable-dep-of: 2824083db76c ("ovl: Always reject mounting over case-insensi= tive directories") Signed-off-by: Sasha Levin --- fs/overlayfs/params.c | 95 ++++++++----------------------------------- 1 file changed, 16 insertions(+), 79 deletions(-) diff --git a/fs/overlayfs/params.c b/fs/overlayfs/params.c index f6ff23fd101c8..0059cc405159e 100644 --- a/fs/overlayfs/params.c +++ b/fs/overlayfs/params.c @@ -346,7 +346,7 @@ static void ovl_parse_param_drop_lowerdir(struct ovl_fs= _context *ctx) /* * Parse lowerdir=3D mount option: * - * (1) lowerdir=3D/lower1:/lower2:/lower3::/data1::/data2 + * e.g.: lowerdir=3D/lower1:/lower2:/lower3::/data1::/data2 * Set "/lower1", "/lower2", and "/lower3" as lower layers and * "/data1" and "/data2" as data lower layers. Any existing lower * layers are replaced. @@ -356,9 +356,9 @@ static int ovl_parse_param_lowerdir(const char *name, s= truct fs_context *fc) int err; struct ovl_fs_context *ctx =3D fc->fs_private; struct ovl_fs_context_layer *l; - char *dup =3D NULL, *dup_iter; + char *dup =3D NULL, *iter; ssize_t nr_lower =3D 0, nr =3D 0, nr_data =3D 0; - bool append =3D false, data_layer =3D false; + bool data_layer =3D false; =20 /* * Ensure we're backwards compatible with mount(2) @@ -366,10 +366,10 @@ static int ovl_parse_param_lowerdir(const char *name,= struct fs_context *fc) */ =20 /* drop all existing lower layers */ - if (!*name) { - ovl_parse_param_drop_lowerdir(ctx); + ovl_parse_param_drop_lowerdir(ctx); + + if (!*name) return 0; - } =20 if (*name =3D=3D ':') { pr_err("cannot append lower layer"); @@ -385,36 +385,11 @@ static int ovl_parse_param_lowerdir(const char *name,= struct fs_context *fc) if (nr_lower < 0) goto out_err; =20 - if ((nr_lower > OVL_MAX_STACK) || - (append && (size_add(ctx->nr, nr_lower) > OVL_MAX_STACK))) { + if (nr_lower > OVL_MAX_STACK) { pr_err("too many lower directories, limit is %d\n", OVL_MAX_STACK); goto out_err; } =20 - if (!append) - ovl_parse_param_drop_lowerdir(ctx); - - /* - * (1) append - * - * We want nr <=3D nr_lower <=3D capacity We know nr > 0 and nr <=3D - * capacity. If nr =3D=3D 0 this wouldn't be append. If nr + - * nr_lower is <=3D capacity then nr <=3D nr_lower <=3D capacity - * already holds. If nr + nr_lower exceeds capacity, we realloc. - * - * (2) replace - * - * Ensure we're backwards compatible with mount(2) which allows - * "lowerdir=3D/a:/b:/c,lowerdir=3D/d:/e:/f" causing the last - * specified lowerdir mount option to win. - * - * We want nr <=3D nr_lower <=3D capacity We know either (i) nr =3D=3D 0 - * or (ii) nr > 0. We also know nr_lower > 0. The capacity - * could've been changed multiple times already so we only know - * nr <=3D capacity. If nr + nr_lower > capacity we realloc, - * otherwise nr <=3D nr_lower <=3D capacity holds already. - */ - nr_lower +=3D ctx->nr; if (nr_lower > ctx->capacity) { err =3D -ENOMEM; l =3D krealloc_array(ctx->lower, nr_lower, sizeof(*ctx->lower), @@ -426,41 +401,17 @@ static int ovl_parse_param_lowerdir(const char *name,= struct fs_context *fc) ctx->capacity =3D nr_lower; } =20 - /* - * (3) By (1) and (2) we know nr <=3D nr_lower <=3D capacity. - * (4) If ctx->nr =3D=3D 0 =3D> replace - * We have verified above that the lowerdir mount option - * isn't an append, i.e., the lowerdir mount option - * doesn't start with ":" or "::". - * (4.1) The lowerdir mount options only contains regular lower - * layers ":". - * =3D> Nothing to verify. - * (4.2) The lowerdir mount options contains regular ":" and - * data "::" layers. - * =3D> We need to verify that data lower layers "::" aren't - * followed by regular ":" lower layers - * (5) If ctx->nr > 0 =3D> append - * We know that there's at least one regular layer - * otherwise we would've failed when parsing the previous - * lowerdir mount option. - * (5.1) The lowerdir mount option is a regular layer ":" append - * =3D> We need to verify that no data layers have been - * specified before. - * (5.2) The lowerdir mount option is a data layer "::" append - * We know that there's at least one regular layer or - * other data layers. =3D> There's nothing to verify. - */ - dup_iter =3D dup; - for (nr =3D ctx->nr; nr < nr_lower; nr++) { - l =3D &ctx->lower[nr]; + iter =3D dup; + l =3D ctx->lower; + for (nr =3D 0; nr < nr_lower; nr++, l++) { memset(l, 0, sizeof(*l)); =20 - err =3D ovl_mount_dir(dup_iter, &l->path, false); + err =3D ovl_mount_dir(iter, &l->path, false); if (err) goto out_put; =20 err =3D -ENOMEM; - l->name =3D kstrdup(dup_iter, GFP_KERNEL_ACCOUNT); + l->name =3D kstrdup(iter, GFP_KERNEL_ACCOUNT); if (!l->name) goto out_put; =20 @@ -472,8 +423,8 @@ static int ovl_parse_param_lowerdir(const char *name, s= truct fs_context *fc) break; =20 err =3D -EINVAL; - dup_iter =3D strchr(dup_iter, '\0') + 1; - if (*dup_iter) { + iter =3D strchr(iter, '\0') + 1; + if (*iter) { /* * This is a regular layer so we require that * there are no data layers. @@ -489,7 +440,7 @@ static int ovl_parse_param_lowerdir(const char *name, s= truct fs_context *fc) =20 /* This is a data lower layer. */ data_layer =3D true; - dup_iter++; + iter++; } ctx->nr =3D nr_lower; ctx->nr_data +=3D nr_data; @@ -497,21 +448,7 @@ static int ovl_parse_param_lowerdir(const char *name, = struct fs_context *fc) return 0; =20 out_put: - /* - * We know nr >=3D ctx->nr < nr_lower. If we failed somewhere - * we want to undo until nr =3D=3D ctx->nr. This is correct for - * both ctx->nr =3D=3D 0 and ctx->nr > 0. - */ - for (; nr >=3D ctx->nr; nr--) { - l =3D &ctx->lower[nr]; - kfree(l->name); - l->name =3D NULL; - path_put(&l->path); - - /* don't overflow */ - if (nr =3D=3D 0) - break; - } + ovl_parse_param_drop_lowerdir(ctx); =20 out_err: kfree(dup); --=20 2.43.0