From: Seth Forshee Date: Wed, 7 Oct 2015 19:53:33 +0000 (-0500) Subject: UBUNTU: SAUCE: (namespace) mtd: Check permissions towards mtd block device inode... X-Git-Tag: Ubuntu-4.10.0-9.11~216 X-Git-Url: https://git.proxmox.com/?p=mirror_ubuntu-zesty-kernel.git;a=commitdiff_plain;h=0e81d9be2e5e0814eebe608124c5af117740b83f UBUNTU: SAUCE: (namespace) mtd: Check permissions towards mtd block device inode when mounting 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. Signed-off-by: Seth Forshee --- diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c index b5b60e1af31c..5d7e7705fed8 100644 --- a/drivers/mtd/mtdsuper.c +++ b/drivers/mtd/mtdsuper.c @@ -125,6 +125,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; @@ -176,7 +177,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);