blkdev: cgroup whitelist permission fix
PATCH 1/1 blkdev: cgroup whitelist permission fix
The cgroup device whitelist code gets confused when trying to grant permission to a disk partition that is not currently open. Part of blkdev_open() includes __blkdev_get() on the whole disk. This simply avoids the cgroup check for the whole disk case when opening a partition.
https://bugzilla.redhat.com/show_bug.cgi?id=589662
--- fs/block_dev.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
fs/block_dev.c +6 -4
@@ -1315,10 +1315,12 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)/* * hooks: /n/, see "layering violations". */ - ret =devcgroup_inode_permission (bdev->bd_inode, perm); -if (ret !=0 ) { -bdput (bdev); -return ret; +if (!for_part) { + ret =devcgroup_inode_permission (bdev->bd_inode, perm); +if (ret !=0 ) { +bdput (bdev); +return ret; + } }lock_kernel ();
Quoted 11 lines · * Chris Wright ([email protected]) wrote:
The cgroup device whitelist code gets confused when trying to grant permission to a disk partition that is not currently open. Part of
blkdev_open()includes__blkdev_get()on the whole disk. This simply avoids the cgroup check for the whole disk case when opening a partition.https://bugzilla.redhat.com/show_bug.cgi?id=589662
Acked-by Serge E. Hallyn <[email protected]>Tested-by Serge E. Hallyn <[email protected]>Signed-off-by Chris Wright <[email protected]>
Andrew, plans to push this on? Christoph doesn't like the whole of blockdev whitelisting for good reason, but it's currently in use and has this bug.
thanks,
-chris