diff options
Diffstat (limited to 'net/socket.c')
| -rw-r--r-- | net/socket.c | 81 | 
1 files changed, 10 insertions, 71 deletions
diff --git a/net/socket.c b/net/socket.c index 2b7a4b5c9b7..92764d83689 100644 --- a/net/socket.c +++ b/net/socket.c @@ -990,7 +990,6 @@ static int sock_close(struct inode *inode, struct file *filp)  		printk(KERN_DEBUG "sock_close: NULL inode\n");  		return 0;  	} -	sock_fasync(-1, filp, 0);  	sock_release(SOCKET_I(inode));  	return 0;  } @@ -1427,8 +1426,8 @@ asmlinkage long sys_listen(int fd, int backlog)   *	clean when we restucture accept also.   */ -long do_accept(int fd, struct sockaddr __user *upeer_sockaddr, -	       int __user *upeer_addrlen, int flags) +asmlinkage long sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, +			    int __user *upeer_addrlen, int flags)  {  	struct socket *sock, *newsock;  	struct file *newfile; @@ -1511,66 +1510,10 @@ out_fd:  	goto out_put;  } -#if 0 -#ifdef HAVE_SET_RESTORE_SIGMASK -asmlinkage long sys_paccept(int fd, struct sockaddr __user *upeer_sockaddr, -			    int __user *upeer_addrlen, -			    const sigset_t __user *sigmask, -			    size_t sigsetsize, int flags) -{ -	sigset_t ksigmask, sigsaved; -	int ret; - -	if (sigmask) { -		/* XXX: Don't preclude handling different sized sigset_t's.  */ -		if (sigsetsize != sizeof(sigset_t)) -			return -EINVAL; -		if (copy_from_user(&ksigmask, sigmask, sizeof(ksigmask))) -			return -EFAULT; - -		sigdelsetmask(&ksigmask, sigmask(SIGKILL)|sigmask(SIGSTOP)); -		sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved); -        } - -	ret = do_accept(fd, upeer_sockaddr, upeer_addrlen, flags); - -	if (ret < 0 && signal_pending(current)) { -		/* -		 * Don't restore the signal mask yet. Let do_signal() deliver -		 * the signal on the way back to userspace, before the signal -		 * mask is restored. -		 */ -		if (sigmask) { -			memcpy(¤t->saved_sigmask, &sigsaved, -			       sizeof(sigsaved)); -			set_restore_sigmask(); -		} -	} else if (sigmask) -		sigprocmask(SIG_SETMASK, &sigsaved, NULL); - -	return ret; -} -#else -asmlinkage long sys_paccept(int fd, struct sockaddr __user *upeer_sockaddr, -			    int __user *upeer_addrlen, -			    const sigset_t __user *sigmask, -			    size_t sigsetsize, int flags) -{ -	/* The platform does not support restoring the signal mask in the -	 * return path.  So we do not allow using paccept() with a signal -	 * mask.  */ -	if (sigmask) -		return -EINVAL; - -	return do_accept(fd, upeer_sockaddr, upeer_addrlen, flags); -} -#endif -#endif -  asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr,  			   int __user *upeer_addrlen)  { -	return do_accept(fd, upeer_sockaddr, upeer_addrlen, 0); +	return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0);  }  /* @@ -2097,7 +2040,7 @@ static const unsigned char nargs[19]={  	AL(0),AL(3),AL(3),AL(3),AL(2),AL(3),  	AL(3),AL(3),AL(4),AL(4),AL(4),AL(6),  	AL(6),AL(2),AL(5),AL(5),AL(3),AL(3), -	AL(6) +	AL(4)  };  #undef AL @@ -2116,7 +2059,7 @@ asmlinkage long sys_socketcall(int call, unsigned long __user *args)  	unsigned long a0, a1;  	int err; -	if (call < 1 || call > SYS_PACCEPT) +	if (call < 1 || call > SYS_ACCEPT4)  		return -EINVAL;  	/* copy_from_user should be SMP safe. */ @@ -2144,9 +2087,8 @@ asmlinkage long sys_socketcall(int call, unsigned long __user *args)  		err = sys_listen(a0, a1);  		break;  	case SYS_ACCEPT: -		err = -		    do_accept(a0, (struct sockaddr __user *)a1, -			      (int __user *)a[2], 0); +		err = sys_accept4(a0, (struct sockaddr __user *)a1, +				  (int __user *)a[2], 0);  		break;  	case SYS_GETSOCKNAME:  		err = @@ -2193,12 +2135,9 @@ asmlinkage long sys_socketcall(int call, unsigned long __user *args)  	case SYS_RECVMSG:  		err = sys_recvmsg(a0, (struct msghdr __user *)a1, a[2]);  		break; -	case SYS_PACCEPT: -		err = -		    sys_paccept(a0, (struct sockaddr __user *)a1, -			        (int __user *)a[2], -				(const sigset_t __user *) a[3], -				a[4], a[5]); +	case SYS_ACCEPT4: +		err = sys_accept4(a0, (struct sockaddr __user *)a1, +				  (int __user *)a[2], a[3]);  		break;  	default:  		err = -EINVAL;  |