Skip to contentSkip to conversation

blkdev: cgroup whitelist permission fix

PATCH New Chris Wright 1 participant 1 message Jul 23, 2010 VFS

lore
Share & tools
lore
#0 lore raw

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. This bug describes the details.

https://bugzilla.redhat.com/show_bug.cgi?id=589662

Basically, the only ways to reliably allow a cgroup access to a partition on a block device when using the whitelist are to 1) also give it access to the whole block device or 2) make sure the partition is already open in a different context.

Seems valid for 2.6.35 and -stable to me, as it's currently broken and causes libvirt's container support to fail.

---
 fs/block_dev.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)
fs/block_dev.c +6 -4
index 7346c96..09b107e 100644
@@ -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();