forked from Minki/linux
[PATCH] dup3 fix
Al Viro notice one cornercase that the new dup3() code. The dup2() function, as a special case, handles dup-ing to the same file descriptor. In this case the current dup3() code does nothing at all. I.e., it ingnores the flags parameter. This shouldn't happen, the close-on-exec flag should be set if requested. In case the O_CLOEXEC bit in the flags parameter is not set the dup3() function should behave in this respect identical to dup2(). This means dup3(fd, fd, 0) should not actively reset the c-o-e flag. The patch below implements this minor change. [AV: credits to Artur Grabowski for bringing that up as potential subtle point in dup2() behaviour] Signed-off-by: Ulrich Drepper <drepper@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
58ec42b061
commit
3c333937ee
@ -139,8 +139,13 @@ asmlinkage long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags)
|
||||
if (!(file = fcheck(oldfd)))
|
||||
goto out_unlock;
|
||||
err = newfd;
|
||||
if (newfd == oldfd)
|
||||
if (unlikely(newfd == oldfd)) {
|
||||
if (flags & O_CLOEXEC) {
|
||||
fdt = files_fdtable(files);
|
||||
FD_SET(newfd, fdt->close_on_exec);
|
||||
}
|
||||
goto out_unlock;
|
||||
}
|
||||
err = -EBADF;
|
||||
if (newfd >= current->signal->rlim[RLIMIT_NOFILE].rlim_cur)
|
||||
goto out_unlock;
|
||||
|
Loading…
Reference in New Issue
Block a user