X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fblock_dev.c;h=10d8a0aa871a096eb3d8577b01d285aa9c1fa433;hb=ee1e6ab6056a8b9c19377257002da98b83819531;hp=470c10ceb0fb3a33dc8f28e7e8b2d3535042075b;hpb=ebaac8c9a5b9e8aeab4009cefcfc1e9421337ac5;p=linux-2.6 diff --git a/fs/block_dev.c b/fs/block_dev.c index 470c10ceb0..10d8a0aa87 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -931,8 +931,16 @@ static int do_open(struct block_device *bdev, struct file *file, int for_part) struct gendisk *disk; int ret; int part; + int perm = 0; - ret = devcgroup_inode_permission(bdev->bd_inode, file->f_mode); + if (file->f_mode & FMODE_READ) + perm |= MAY_READ; + if (file->f_mode & FMODE_WRITE) + perm |= MAY_WRITE; + /* + * hooks: /n/, see "layering violations". + */ + ret = devcgroup_inode_permission(bdev->bd_inode, perm); if (ret != 0) return ret;