lkml.org 
[lkml]   [2009]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: [PATCH v2 resend] vfs: new O_NODE open flag
From
Date
On Sun, 8 Nov 2009, Pavel Machek wrote:
> Does it really close the race completely?
>
> udev sets 660
> open does permission checks
> device disappears
> chmod 000
> new device appears
> udev chmods 600
> open returns new device

Yes, there's still a small hole there.

We could check nlink != 0 after grabbing the device (untested patch).
That is a hack, however, and would break apps which previously relied
on being able to re-open already deleted devices through /proc/*/fd.
But there might not be a better solution... Thoughts?

Thanks,
Miklos


Index: linux-2.6/fs/char_dev.c
===================================================================
--- linux-2.6.orig/fs/char_dev.c 2009-09-24 20:10:58.000000000 +0200
+++ linux-2.6/fs/char_dev.c 2009-11-16 12:48:58.000000000 +0100
@@ -396,6 +396,16 @@ static int chrdev_open(struct inode *ino
if (ret)
return ret;

+ /*
+ * The device might have been removed and then reused while
+ * the open was in progress. Make sure we don't let open
+ * proceed in such a case, since the old device could have had
+ * different permissions.
+ */
+ ret = -ENOENT;
+ if (inode->i_nlink == 0)
+ goto out_cdev_put;
+
ret = -ENXIO;
filp->f_op = fops_get(p->ops);
if (!filp->f_op)

\
 
 \ /
  Last update: 2009-11-16 12:55    [W:0.053 / U:0.560 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site