Messages in this thread Patch in this message | | | Subject | Re: [PATCH v2 resend] vfs: new O_NODE open flag | From | Miklos Szeredi <> | Date | Mon, 16 Nov 2009 12:50:58 +0100 |
| |
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)
| |