Sockets haven't had their own special ioctls since before linux 2.0.29. sock_no_fcntl is only called for F_SETOWN, so it can stand some simplification. diff -urNX dontdiff linux-2.5.24/fs/fcntl.c linux-2.5.24-mm/fs/fcntl.c --- linux-2.5.24/fs/fcntl.c Sun Jun 9 06:09:49 2002 +++ linux-2.5.24-mm/fs/fcntl.c Tue Jul 2 10:55:29 2002 @@ -347,10 +345,6 @@ err = fcntl_dirnotify(fd, filp, arg); break; default: - /* sockets need a few special fcntls. */ - err = -EINVAL; - if (S_ISSOCK (filp->f_dentry->d_inode->i_mode)) - err = sock_fcntl (filp, cmd, arg); break; } diff -urNX dontdiff linux-2.5.24/net/core/sock.c linux-2.5.24-mm/net/core/sock.c --- linux-2.5.24/net/core/sock.c Sun Jun 2 18:44:52 2002 +++ linux-2.5.24-mm/net/core/sock.c Tue Jul 2 10:37:58 2002 @@ -1048,32 +1048,17 @@ return -EOPNOTSUPP; } -/* - * Note: if you add something that sleeps here then change sock_fcntl() - * to do proper fd locking. - */ int sock_no_fcntl(struct socket *sock, unsigned int cmd, unsigned long arg) { - struct sock *sk = sock->sk; - - switch(cmd) - { - case F_SETOWN: - /* - * This is a little restrictive, but it's the only - * way to make sure that you can't send a sigurg to - * another process. - */ - if (current->pgrp != -arg && - current->pid != arg && - !capable(CAP_KILL)) return(-EPERM); - sk->proc = arg; - return(0); - case F_GETOWN: - return(sk->proc); - default: - return(-EINVAL); - } + /* + * TCP doesn't use the standard fasync method to deliver + * SIGURG and SIGIO, so we check permissions at setup time. + * This should be fixed. + */ + if (current->pgrp != -arg && current->pid != arg && !capable(CAP_KILL)) + return -EPERM; + sock->sk->proc = arg; + return 0; } int sock_no_sendmsg(struct socket *sock, struct msghdr *m, int flags, -- Revolutions do not require corporate support. - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html