try to get rid of races in hostfs open()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 7 Jun 2010 03:49:18 +0000 (23:49 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 9 Aug 2010 20:48:15 +0000 (16:48 -0400)
commitf8ad850f11e11d10e7de1a16ca53cb193afc9313
tree4812193c6be29f41d3de3ae74705e95a9566546c
parentf8d7e1877e5121841bc9a4d284a04dbc13f45bea
try to get rid of races in hostfs open()

In case of mode mismatch, do *not* blindly close the descriptor
another openers might be using right now.  Open the underlying
file with currently sufficient mode, then
* if current mode has grown so that it's sufficient for
us now, just close our new fd
* if current mode has grown and our fd is *not* enough
to cover it, close and repeat.
* otherwise, install our fd if the file hadn't been
opened at all or dup2() our fd over the current one (and close
our fd).
Critical section is protected by mutex; yes, system-wide.  All
we do under it is a bunch of comparison and maybe an overwriting
dup2() on host.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/hostfs/hostfs.h
fs/hostfs/hostfs_kern.c
fs/hostfs/hostfs_user.c