diff mbox series

[v2,36/39] overlayfs: do not mount on top of idmapped mounts

Message ID 20201115103718.298186-37-christian.brauner@ubuntu.com (mailing list archive)
State New
Headers show
Series fs: idmapped mounts | expand

Commit Message

Christian Brauner Nov. 15, 2020, 10:37 a.m. UTC
Prevent overlayfs from being mounted on top of idmapped mounts until we
have ported it to handle this case and added proper testing for it.

Cc: Christoph Hellwig <hch@lst.de>
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
---
/* v2 */
patch introduced
---
 fs/overlayfs/super.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Amir Goldstein Nov. 15, 2020, 12:31 p.m. UTC | #1
On Sun, Nov 15, 2020 at 12:42 PM Christian Brauner
<christian.brauner@ubuntu.com> wrote:
>
> Prevent overlayfs from being mounted on top of idmapped mounts until we
> have ported it to handle this case and added proper testing for it.
>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: David Howells <dhowells@redhat.com>
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> Cc: linux-fsdevel@vger.kernel.org
> Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
> ---
> /* v2 */
> patch introduced
> ---
>  fs/overlayfs/super.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
> index 0d4f2baf6836..3cacc3d3fb65 100644
> --- a/fs/overlayfs/super.c
> +++ b/fs/overlayfs/super.c
> @@ -1708,6 +1708,12 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
>                 if (err)
>                         goto out_err;
>
> +               if (mnt_idmapped(stack[i].mnt)) {
> +                       err = -EINVAL;
> +                       pr_err("idmapped lower layers are currently unsupported\n");
> +                       goto out_err;
> +               }
> +
>                 lower = strchr(lower, '\0') + 1;
>         }
>
> @@ -1939,6 +1945,12 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
>                 if (err)
>                         goto out_err;
>
> +               if (mnt_idmapped(upperpath.mnt)) {
> +                       err = -EINVAL;
> +                       pr_err("idmapped lower layers are currently unsupported\n");
> +                       goto out_err;
> +               }
> +

Both checks should be replaced with one check in ovl_mount_dir_noesc()
right next to ovl_dentry_weird() check and FWIW the error above about
"lower layers" when referring to upperpath.mnt is confusing.
"idmapped layers..." should be fine.

Thanks,
Amir.
Christian Brauner Nov. 18, 2020, 10:26 a.m. UTC | #2
On Sun, Nov 15, 2020 at 02:31:46PM +0200, Amir Goldstein wrote:
> On Sun, Nov 15, 2020 at 12:42 PM Christian Brauner
> <christian.brauner@ubuntu.com> wrote:
> >
> > Prevent overlayfs from being mounted on top of idmapped mounts until we
> > have ported it to handle this case and added proper testing for it.
> >
> > Cc: Christoph Hellwig <hch@lst.de>
> > Cc: David Howells <dhowells@redhat.com>
> > Cc: Al Viro <viro@zeniv.linux.org.uk>
> > Cc: linux-fsdevel@vger.kernel.org
> > Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
> > ---
> > /* v2 */
> > patch introduced
> > ---
> >  fs/overlayfs/super.c | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
> > index 0d4f2baf6836..3cacc3d3fb65 100644
> > --- a/fs/overlayfs/super.c
> > +++ b/fs/overlayfs/super.c
> > @@ -1708,6 +1708,12 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
> >                 if (err)
> >                         goto out_err;
> >
> > +               if (mnt_idmapped(stack[i].mnt)) {
> > +                       err = -EINVAL;
> > +                       pr_err("idmapped lower layers are currently unsupported\n");
> > +                       goto out_err;
> > +               }
> > +
> >                 lower = strchr(lower, '\0') + 1;
> >         }
> >
> > @@ -1939,6 +1945,12 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
> >                 if (err)
> >                         goto out_err;
> >
> > +               if (mnt_idmapped(upperpath.mnt)) {
> > +                       err = -EINVAL;
> > +                       pr_err("idmapped lower layers are currently unsupported\n");
> > +                       goto out_err;
> > +               }
> > +
> 
> Both checks should be replaced with one check in ovl_mount_dir_noesc()
> right next to ovl_dentry_weird() check and FWIW the error above about
> "lower layers" when referring to upperpath.mnt is confusing.
> "idmapped layers..." should be fine.

Noted, thanks!

Christian
diff mbox series

Patch

diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index 0d4f2baf6836..3cacc3d3fb65 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -1708,6 +1708,12 @@  static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
 		if (err)
 			goto out_err;
 
+		if (mnt_idmapped(stack[i].mnt)) {
+			err = -EINVAL;
+			pr_err("idmapped lower layers are currently unsupported\n");
+			goto out_err;
+		}
+
 		lower = strchr(lower, '\0') + 1;
 	}
 
@@ -1939,6 +1945,12 @@  static int ovl_fill_super(struct super_block *sb, void *data, int silent)
 		if (err)
 			goto out_err;
 
+		if (mnt_idmapped(upperpath.mnt)) {
+			err = -EINVAL;
+			pr_err("idmapped lower layers are currently unsupported\n");
+			goto out_err;
+		}
+
 		err = ovl_get_workdir(sb, ofs, &upperpath);
 		if (err)
 			goto out_err;