|
From: Fred W. <fw...@us...> - 2006-01-24 04:40:43
|
Update of /cvsroot/linux-abi/linux-abi/linux-26/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2468/linux-26/net Modified Files: socket.c Log Message: linux-26: patch to 2.6.14, incl. audit syscalls Index: socket.c =================================================================== RCS file: /cvsroot/linux-abi/linux-abi/linux-26/net/socket.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** socket.c 24 Jan 2006 00:28:19 -0000 1.3 --- socket.c 24 Jan 2006 04:40:18 -0000 1.4 *************** *** 71,74 **** --- 71,76 ---- #include <linux/wanrouter.h> #include <linux/if_bridge.h> + #include <linux/if_frad.h> + #include <linux/if_vlan.h> #include <linux/init.h> #include <linux/poll.h> *************** *** 82,85 **** --- 84,88 ---- #include <linux/compat.h> #include <linux/kmod.h> + #include <linux/audit.h> #ifdef CONFIG_NET_RADIO *************** *** 227,231 **** if(copy_from_user(kaddr,uaddr,ulen)) return -EFAULT; ! return 0; } --- 230,234 ---- if(copy_from_user(kaddr,uaddr,ulen)) return -EFAULT; ! return audit_sockaddr(ulen, kaddr); } *************** *** 272,276 **** #define SOCKFS_MAGIC 0x534F434B ! static kmem_cache_t * sock_inode_cachep; static struct inode *sock_alloc_inode(struct super_block *sb) --- 275,279 ---- #define SOCKFS_MAGIC 0x534F434B ! static kmem_cache_t * sock_inode_cachep __read_mostly; static struct inode *sock_alloc_inode(struct super_block *sb) *************** *** 331,335 **** } ! static struct vfsmount *sock_mnt; static struct file_system_type sock_fs_type = { --- 334,338 ---- } ! static struct vfsmount *sock_mnt __read_mostly; static struct file_system_type sock_fs_type = { *************** *** 383,389 **** } ! sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino); this.name = name; - this.len = strlen(name); this.hash = SOCK_INODE(sock)->i_ino; --- 386,391 ---- } ! this.len = sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino); this.name = name; this.hash = SOCK_INODE(sock)->i_ino; *************** *** 405,408 **** --- 407,411 ---- file->f_flags = O_RDWR; file->f_pos = 0; + file->private_data = sock; fd_install(fd, file); } *************** *** 437,440 **** --- 440,446 ---- } + if (file->f_op == &socket_file_ops) + return file->private_data; /* set in sock_map_fd */ + inode = file->f_dentry->d_inode; if (!S_ISSOCK(inode->i_mode)) { *************** *** 662,666 **** iocb->private = x; x->kiocb = iocb; ! sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode); x->async_msg.msg_name = NULL; --- 668,672 ---- iocb->private = x; x->kiocb = iocb; ! sock = iocb->ki_filp->private_data; x->async_msg.msg_name = NULL; *************** *** 704,708 **** iocb->private = x; x->kiocb = iocb; ! sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode); x->async_msg.msg_name = NULL; --- 710,714 ---- iocb->private = x; x->kiocb = iocb; ! sock = iocb->ki_filp->private_data; x->async_msg.msg_name = NULL; *************** *** 721,731 **** } ! ssize_t sock_sendpage(struct file *file, struct page *page, ! int offset, size_t size, loff_t *ppos, int more) { struct socket *sock; int flags; ! sock = SOCKET_I(file->f_dentry->d_inode); flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT; --- 727,737 ---- } ! static ssize_t sock_sendpage(struct file *file, struct page *page, ! int offset, size_t size, loff_t *ppos, int more) { struct socket *sock; int flags; ! sock = file->private_data; flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT; *************** *** 736,740 **** } ! static int sock_readv_writev(int type, struct inode * inode, struct file * file, const struct iovec * iov, long count, size_t size) --- 742,746 ---- } ! static int sock_readv_writev(int type, struct file * file, const struct iovec * iov, long count, size_t size) *************** *** 743,747 **** struct socket *sock; ! sock = SOCKET_I(inode); msg.msg_name = NULL; --- 749,753 ---- struct socket *sock; ! sock = file->private_data; msg.msg_name = NULL; *************** *** 770,774 **** for (i = 0 ; i < count ; i++) tot_len += vector[i].iov_len; ! return sock_readv_writev(VERIFY_WRITE, file->f_dentry->d_inode, file, vector, count, tot_len); } --- 776,780 ---- for (i = 0 ; i < count ; i++) tot_len += vector[i].iov_len; ! return sock_readv_writev(VERIFY_WRITE, file, vector, count, tot_len); } *************** *** 781,785 **** for (i = 0 ; i < count ; i++) tot_len += vector[i].iov_len; ! return sock_readv_writev(VERIFY_READ, file->f_dentry->d_inode, file, vector, count, tot_len); } --- 787,791 ---- for (i = 0 ; i < count ; i++) tot_len += vector[i].iov_len; ! return sock_readv_writev(VERIFY_READ, file, vector, count, tot_len); } *************** *** 835,839 **** int pid, err; ! sock = SOCKET_I(file->f_dentry->d_inode); if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) { err = dev_ioctl(cmd, argp); --- 841,845 ---- int pid, err; ! sock = file->private_data; if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) { err = dev_ioctl(cmd, argp); *************** *** 934,938 **** * We can't return errors to poll, so it's either yes or no. */ ! sock = SOCKET_I(file->f_dentry->d_inode); return sock->ops->poll(file, sock, wait); } --- 940,944 ---- * We can't return errors to poll, so it's either yes or no. */ ! sock = file->private_data; return sock->ops->poll(file, sock, wait); } *************** *** 940,949 **** static int sock_mmap(struct file * file, struct vm_area_struct * vma) { ! struct socket *sock = SOCKET_I(file->f_dentry->d_inode); return sock->ops->mmap(file, sock, vma); } ! int sock_close(struct inode *inode, struct file *filp) { /* --- 946,955 ---- static int sock_mmap(struct file * file, struct vm_area_struct * vma) { ! struct socket *sock = file->private_data; return sock->ops->mmap(file, sock, vma); } ! static int sock_close(struct inode *inode, struct file *filp) { /* *************** *** 990,994 **** } ! sock = SOCKET_I(filp->f_dentry->d_inode); if ((sk=sock->sk) == NULL) { --- 996,1000 ---- } ! sock = filp->private_data; if ((sk=sock->sk) == NULL) { *************** *** 1140,1145 **** goto out_release; ! if ((err = net_families[family]->create(sock, protocol)) < 0) goto out_module_put; /* * Now to bump the refcnt of the [loadable] module that owns this --- 1146,1154 ---- goto out_release; ! if ((err = net_families[family]->create(sock, protocol)) < 0) { ! sock->ops = NULL; goto out_module_put; + } + /* * Now to bump the refcnt of the [loadable] module that owns this *************** *** 1355,1362 **** newsock->ops = sock->ops; - err = security_socket_accept(sock, newsock); - if (err) - goto out_release; - /* * We don't need try_module_get here, as the listening socket (sock) --- 1364,1367 ---- *************** *** 1365,1368 **** --- 1370,1377 ---- __module_get(newsock->ops->owner); + err = security_socket_accept(sock, newsock); + if (err) + goto out_release; + err = sock->ops->accept(sock, newsock, sock->file->f_flags); if (err < 0) *************** *** 1695,1699 **** char address[MAX_SOCK_ADDR]; struct iovec iovstack[UIO_FASTIOV], *iov = iovstack; ! unsigned char ctl[sizeof(struct cmsghdr) + 20]; /* 20 is size of ipv6_pktinfo */ unsigned char *ctl_buf = ctl; struct msghdr msg_sys; --- 1704,1710 ---- char address[MAX_SOCK_ADDR]; struct iovec iovstack[UIO_FASTIOV], *iov = iovstack; ! unsigned char ctl[sizeof(struct cmsghdr) + 20] ! __attribute__ ((aligned (sizeof(__kernel_size_t)))); ! /* 20 is size of ipv6_pktinfo */ unsigned char *ctl_buf = ctl; struct msghdr msg_sys; *************** *** 1740,1747 **** ctl_len = msg_sys.msg_controllen; if ((MSG_CMSG_COMPAT & flags) && ctl_len) { ! err = cmsghdr_from_user_compat_to_kern(&msg_sys, ctl, sizeof(ctl)); if (err) goto out_freeiov; ctl_buf = msg_sys.msg_control; } else if (ctl_len) { if (ctl_len > sizeof(ctl)) --- 1751,1759 ---- ctl_len = msg_sys.msg_controllen; if ((MSG_CMSG_COMPAT & flags) && ctl_len) { ! err = cmsghdr_from_user_compat_to_kern(&msg_sys, sock->sk, ctl, sizeof(ctl)); if (err) goto out_freeiov; ctl_buf = msg_sys.msg_control; + ctl_len = msg_sys.msg_controllen; } else if (ctl_len) { if (ctl_len > sizeof(ctl)) *************** *** 1856,1860 **** goto out_freeiov; } ! err = __put_user(msg_sys.msg_flags, COMPAT_FLAGS(msg)); if (err) goto out_freeiov; --- 1868,1873 ---- goto out_freeiov; } ! err = __put_user((msg_sys.msg_flags & ~MSG_CMSG_COMPAT), ! COMPAT_FLAGS(msg)); if (err) goto out_freeiov; *************** *** 1907,1911 **** if (copy_from_user(a, args, nargs[call])) return -EFAULT; ! a0=a[0]; a1=a[1]; --- 1920,1928 ---- if (copy_from_user(a, args, nargs[call])) return -EFAULT; ! ! err = audit_socketcall(nargs[call]/sizeof(unsigned long), a); ! if (err) ! return err; ! a0=a[0]; a1=a[1]; *************** *** 2020,2026 **** } - - extern void sk_init(void); - void __init sock_init(void) { --- 2037,2040 ---- |