| From beae836e9c61ee039e367a94b14f7fea08f0ad4c Mon Sep 17 00:00:00 2001 |
| From: Amir Goldstein <amir73il@gmail.com> |
| Date: Sat, 14 Oct 2023 22:30:04 +0300 |
| Subject: ovl: temporarily disable appending lowedirs |
| |
| From: Amir Goldstein <amir73il@gmail.com> |
| |
| commit beae836e9c61ee039e367a94b14f7fea08f0ad4c upstream. |
| |
| Kernel v6.5 converted overlayfs to new mount api. |
| As an added bonus, it also added a feature to allow appending lowerdirs |
| using lowerdir=:/lower2,lowerdir=::/data3 syntax. |
| |
| This new syntax has raised some concerns regarding escaping of colons. |
| We decided to try and disable this syntax, which hasn't been in the wild |
| for so long and introduce it again in 6.7 using explicit mount options |
| lowerdir+=/lower2,datadir+=/data3. |
| |
| Suggested-by: Miklos Szeredi <miklos@szeredi.hu> |
| Link: https://lore.kernel.org/r/CAJfpegsr3A4YgF2YBevWa6n3=AcP7hNndG6EPMu3ncvV-AM71A@mail.gmail.com/ |
| Fixes: b36a5780cb44 ("ovl: modify layer parameter parsing") |
| Signed-off-by: Amir Goldstein <amir73il@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/overlayfs/params.c | 52 ++------------------------------------------------ |
| 1 file changed, 3 insertions(+), 49 deletions(-) |
| |
| --- a/fs/overlayfs/params.c |
| +++ b/fs/overlayfs/params.c |
| @@ -284,12 +284,6 @@ static void ovl_parse_param_drop_lowerdi |
| * Set "/lower1", "/lower2", and "/lower3" as lower layers and |
| * "/data1" and "/data2" as data lower layers. Any existing lower |
| * layers are replaced. |
| - * (2) lowerdir=:/lower4 |
| - * Append "/lower4" to current stack of lower layers. This requires |
| - * that there already is at least one lower layer configured. |
| - * (3) lowerdir=::/lower5 |
| - * Append data "/lower5" as data lower layer. This requires that |
| - * there's at least one regular lower layer present. |
| */ |
| static int ovl_parse_param_lowerdir(const char *name, struct fs_context *fc) |
| { |
| @@ -311,49 +305,9 @@ static int ovl_parse_param_lowerdir(cons |
| return 0; |
| } |
| |
| - if (strncmp(name, "::", 2) == 0) { |
| - /* |
| - * This is a data layer. |
| - * There must be at least one regular lower layer |
| - * specified. |
| - */ |
| - if (ctx->nr == 0) { |
| - pr_err("data lower layers without regular lower layers not allowed"); |
| - return -EINVAL; |
| - } |
| - |
| - /* Skip the leading "::". */ |
| - name += 2; |
| - data_layer = true; |
| - /* |
| - * A data layer is automatically an append as there |
| - * must've been at least one regular lower layer. |
| - */ |
| - append = true; |
| - } else if (*name == ':') { |
| - /* |
| - * This is a regular lower layer. |
| - * If users want to append a layer enforce that they |
| - * have already specified a first layer before. It's |
| - * better to be strict. |
| - */ |
| - if (ctx->nr == 0) { |
| - pr_err("cannot append layer if no previous layer has been specified"); |
| - return -EINVAL; |
| - } |
| - |
| - /* |
| - * Once a sequence of data layers has started regular |
| - * lower layers are forbidden. |
| - */ |
| - if (ctx->nr_data > 0) { |
| - pr_err("regular lower layers cannot follow data lower layers"); |
| - return -EINVAL; |
| - } |
| - |
| - /* Skip the leading ":". */ |
| - name++; |
| - append = true; |
| + if (*name == ':') { |
| + pr_err("cannot append lower layer"); |
| + return -EINVAL; |
| } |
| |
| dup = kstrdup(name, GFP_KERNEL); |