|
@@ -1426,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;
|
|
@@ -1510,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);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -2096,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
|
|
@@ -2115,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. */
|
|
@@ -2143,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 =
|
|
@@ -2192,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;
|