Message ID | 945d325a2239efcd55273abb2bac41cfc7264fea.1512041070.git.dongsu@kinvolk.io |
---|---|
State | Rejected |
Headers | show |
Series | [01/11] block_dev: Support checking inode permissions in lookup_bdev() | expand |
Dongsu, On Fri, Dec 22, 2017 at 3:32 PM, Dongsu Park <dongsu@kinvolk.io> wrote: > From: Seth Forshee <seth.forshee@canonical.com> > > Unprivileged users should not be able to mount mtd block devices > when they lack sufficient privileges towards the block device > inode. Update mount_mtd() to validate that the user has the > required access to the inode at the specified path. The check > will be skipped for CAP_SYS_ADMIN, so privileged mounts will > continue working as before. What is the big picture of this? Can in future an unprivileged user just mount UBIFS? Please note that UBIFS sits on top of a character device and not a block device.
On Fri, Dec 22, 2017 at 03:32:26PM +0100, Dongsu Park wrote: > From: Seth Forshee <seth.forshee@canonical.com> > > Unprivileged users should not be able to mount mtd block devices > when they lack sufficient privileges towards the block device > inode. Update mount_mtd() to validate that the user has the > required access to the inode at the specified path. The check > will be skipped for CAP_SYS_ADMIN, so privileged mounts will > continue working as before. > > Patch v3 is available: https://patchwork.kernel.org/patch/7640011/ > > Cc: linux-mtd@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Seth Forshee <seth.forshee@canonical.com> > Signed-off-by: Dongsu Park <dongsu@kinvolk.io> Acked-by: Serge Hallyn <serge@hallyn.com> > --- > drivers/mtd/mtdsuper.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c > index 4a4d40c0..3c8734f3 100644 > --- a/drivers/mtd/mtdsuper.c > +++ b/drivers/mtd/mtdsuper.c > @@ -129,6 +129,7 @@ struct dentry *mount_mtd(struct file_system_type *fs_type, int flags, > #ifdef CONFIG_BLOCK > struct block_device *bdev; > int ret, major; > + int perm; > #endif > int mtdnr; > > @@ -180,7 +181,10 @@ struct dentry *mount_mtd(struct file_system_type *fs_type, int flags, > /* try the old way - the hack where we allowed users to mount > * /dev/mtdblock$(n) but didn't actually _use_ the blockdev > */ > - bdev = lookup_bdev(dev_name, 0); > + perm = MAY_READ; > + if (!(flags & MS_RDONLY)) > + perm |= MAY_WRITE; > + bdev = lookup_bdev(dev_name, perm); > if (IS_ERR(bdev)) { > ret = PTR_ERR(bdev); > pr_debug("MTDSB: lookup_bdev() returned %d\n", ret); > -- > 2.13.6 > > _______________________________________________ > Containers mailing list > Containers@lists.linux-foundation.org > https://lists.linuxfoundation.org/mailman/listinfo/containers
Hi, On Fri, Dec 22, 2017 at 10:06 PM, Richard Weinberger <richard.weinberger@gmail.com> wrote: > Dongsu, > > On Fri, Dec 22, 2017 at 3:32 PM, Dongsu Park <dongsu@kinvolk.io> wrote: >> From: Seth Forshee <seth.forshee@canonical.com> >> >> Unprivileged users should not be able to mount mtd block devices >> when they lack sufficient privileges towards the block device >> inode. Update mount_mtd() to validate that the user has the >> required access to the inode at the specified path. The check >> will be skipped for CAP_SYS_ADMIN, so privileged mounts will >> continue working as before. > > What is the big picture of this? > Can in future an unprivileged user just mount UBIFS? I'm not sure I'm aware of all use cases w.r.t mtd & ubifs. To my understanding, in these days many container runtimes allow unprivileged users to run containers. (docker, lxc, runc, bubblewrap, etc) That's why the kernel should deal with additional permission checks that might have not been necessary in the past. This MTD patch is one of those special cases. > Please note that UBIFS sits on top of a character device and not a block device. Aha, good to know. Thanks, Dongsu > -- > Thanks, > //richard
Dongsu, Am Samstag, 23. Dezember 2017, 13:18:30 CET schrieb Dongsu Park: > Hi, > > On Fri, Dec 22, 2017 at 10:06 PM, Richard Weinberger > > <richard.weinberger@gmail.com> wrote: > > Dongsu, > > > > On Fri, Dec 22, 2017 at 3:32 PM, Dongsu Park <dongsu@kinvolk.io> wrote: > >> From: Seth Forshee <seth.forshee@canonical.com> > >> > >> Unprivileged users should not be able to mount mtd block devices > >> when they lack sufficient privileges towards the block device > >> inode. Update mount_mtd() to validate that the user has the > >> required access to the inode at the specified path. The check > >> will be skipped for CAP_SYS_ADMIN, so privileged mounts will > >> continue working as before. > > > > What is the big picture of this? > > Can in future an unprivileged user just mount UBIFS? > > I'm not sure I'm aware of all use cases w.r.t mtd & ubifs. > To my understanding, in these days many container runtimes allow > unprivileged users to run containers. (docker, lxc, runc, bubblewrap, etc) > That's why the kernel should deal with additional permission checks > that might have not been necessary in the past. > This MTD patch is one of those special cases. My fear is that a corner case is forgotten and all of a sudden someone can do funky things with MTD in a container... Thanks, //richard
diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c index 4a4d40c0..3c8734f3 100644 --- a/drivers/mtd/mtdsuper.c +++ b/drivers/mtd/mtdsuper.c @@ -129,6 +129,7 @@ struct dentry *mount_mtd(struct file_system_type *fs_type, int flags, #ifdef CONFIG_BLOCK struct block_device *bdev; int ret, major; + int perm; #endif int mtdnr; @@ -180,7 +181,10 @@ struct dentry *mount_mtd(struct file_system_type *fs_type, int flags, /* try the old way - the hack where we allowed users to mount * /dev/mtdblock$(n) but didn't actually _use_ the blockdev */ - bdev = lookup_bdev(dev_name, 0); + perm = MAY_READ; + if (!(flags & MS_RDONLY)) + perm |= MAY_WRITE; + bdev = lookup_bdev(dev_name, perm); if (IS_ERR(bdev)) { ret = PTR_ERR(bdev); pr_debug("MTDSB: lookup_bdev() returned %d\n", ret);