• A
    [PATCH] dup_fd() part 4 - race fix · adbecb12
    Al Viro 提交于
    Parent _can_ be a clone task, contrary to the comment.  Moreover,
    more files could be opened while we allocate a copy, in which case
    we end up copying only part into new descriptor table.  Since what
    we get _is_ affected by all changes in the old range, we can get
    rather weird effects - e.g.
    	dup2(0, 1024); close(0);
    in parallel with fork() resulting in child that sees the effect of
    close(), but not that of dup2() done just before that close().
    
    What we need is to recalculate the open_count after having reacquired
    ->file_lock and if external fdtable we'd just allocated is too small for
    it, free the sucker and redo allocation.
    Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
    adbecb12
file.c 10.5 KB