Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 106384
b: refs/heads/master
c: 6c5d051
h: refs/heads/master
v: v3
  • Loading branch information
Al Viro committed Jul 27, 2008
1 parent fa7c0e3 commit b20d5b4
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4cc38a1b383f0c6c65a3fef4ff8144e8000e4ec3
refs/heads/master: 6c5d0512a091480c9f981162227fdb1c9d70e555
20 changes: 11 additions & 9 deletions trunk/fs/fcntl.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,18 +135,12 @@ asmlinkage long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags)
if ((flags & ~O_CLOEXEC) != 0)
return -EINVAL;

if (unlikely(oldfd == newfd))
return -EINVAL;

spin_lock(&files->file_lock);
if (!(file = fcheck(oldfd)))
goto out_unlock;
err = newfd;
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;
get_file(file); /* We are now finished with oldfd */
Expand Down Expand Up @@ -194,6 +188,14 @@ asmlinkage long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags)

asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd)
{
if (unlikely(newfd == oldfd)) { /* corner case */
struct files_struct *files = current->files;
rcu_read_lock();
if (!fcheck_files(files, oldfd))
oldfd = -EBADF;
rcu_read_unlock();
return oldfd;
}
return sys_dup3(oldfd, newfd, 0);
}

Expand Down

0 comments on commit b20d5b4

Please sign in to comment.