* Michael Halcrow ([EMAIL PROTECTED]) wrote:
> [...].  This occurs because the bd_release function will
> bd_release(bdev) and set inode->i_security to NULL on the close(fd1).
> Hence, we want to place the control at the level of the file struct,
> not the inode.

This is basically what I was referring to pre-merge.  And it is still
not fully sufficient.  Multiple processes can share an fd.  So the test
against current is broken.  Also well-behaved apps that are already
using O_EXCL will break.  Using filp as the holder is sufficient to fix
both of these issues.  Here's a 3.5/8 that will fix this.  6/8 no longer
applies cleanly with this change.

Signed-off-by: Chris Wright <[EMAIL PROTECTED]>

--- a/security/seclvl.c~bd_claim        2005-02-08 15:05:09.000000000 -0800
+++ b/security/seclvl.c 2005-02-08 15:05:17.000000000 -0800
@@ -492,17 +492,16 @@
  */
 static int seclvl_bd_claim(struct file * filp)
 {
-       int holder;
        struct block_device *bdev = NULL;
        dev_t dev = filp->f_dentry->d_inode->i_rdev;
        bdev = open_by_devnum(dev, FMODE_WRITE);
        if (bdev) {
-               if (bd_claim(bdev, &holder)) {
+               if (bd_claim(bdev, filp)) {
                        blkdev_put(bdev);
                        return -EPERM;
                }
                /* Claimed; mark it to release on close */
-               filp->f_security = current;
+               filp->f_security = filp;
        }
        return 0;
 }
@@ -597,7 +596,7 @@
        if (dentry && (filp->f_mode & FMODE_WRITE)) {
                struct inode * inode = dentry->d_inode;
                if (inode && S_ISBLK(inode->i_mode)
-                   && filp->f_security == current) {
+                   && filp->f_security == filp) {
                        struct block_device *bdev = inode->i_bdev;
                        if (bdev) {
                                bd_release(bdev);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to