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>
This commit is contained in:
@@ -160,6 +160,11 @@ int fsync_file(int fd, int datasync)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int replace_file(int oldfd, int fd)
|
||||
{
|
||||
return dup2(oldfd, fd);
|
||||
}
|
||||
|
||||
void close_file(void *stream)
|
||||
{
|
||||
close(*((int *) stream));
|
||||
|
Reference in New Issue
Block a user