mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	dup3: Return an error when oldfd == newfd.
I have tested the attached patch to fix the dup3 regression.
Rich.
From 0944e30e12dec6544b3602626b60ff412375c78f Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 9 Oct 2012 14:42:45 +0100
Subject: [PATCH] dup3: Return an error when oldfd == newfd.
The following commit:
  commit fe17f22d7f
  Author: Al Viro <viro@zeniv.linux.org.uk>
  Date:   Tue Aug 21 11:48:11 2012 -0400
    take purely descriptor-related stuff from fcntl.c to file.c
was supposed to be just code motion, but it dropped the following two
lines:
  if (unlikely(oldfd == newfd))
          return -EINVAL;
from the dup3 system call.  dup3 is not specified by POSIX, so Linux
can do what it likes.  However the POSIX proposal for dup3 [1] states
that it should return an error if oldfd == newfd.
[1] http://austingroupbugs.net/view.php?id=411
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Tested-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
			
			
This commit is contained in:
		
							parent
							
								
									d1c7d97ad5
								
							
						
					
					
						commit
						aed976475b
					
				
					 1 changed files with 3 additions and 0 deletions
				
			
		|  | @ -922,6 +922,9 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags) | ||||||
| 	if ((flags & ~O_CLOEXEC) != 0) | 	if ((flags & ~O_CLOEXEC) != 0) | ||||||
| 		return -EINVAL; | 		return -EINVAL; | ||||||
| 
 | 
 | ||||||
|  | 	if (unlikely(oldfd == newfd)) | ||||||
|  | 		return -EINVAL; | ||||||
|  | 
 | ||||||
| 	if (newfd >= rlimit(RLIMIT_NOFILE)) | 	if (newfd >= rlimit(RLIMIT_NOFILE)) | ||||||
| 		return -EMFILE; | 		return -EMFILE; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Richard W.M. Jones
						Richard W.M. Jones