aboutsummaryrefslogtreecommitdiffstats
path: root/net/unix/af_unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/unix/af_unix.c')
-rw-r--r--net/unix/af_unix.c58
1 files changed, 25 insertions, 33 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 526b6edab018..5266ea7b922b 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -305,7 +305,7 @@ static struct sock *unix_find_socket_byinode(struct inode *i)
305 &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) { 305 &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
306 struct dentry *dentry = unix_sk(s)->path.dentry; 306 struct dentry *dentry = unix_sk(s)->path.dentry;
307 307
308 if (dentry && dentry->d_inode == i) { 308 if (dentry && d_backing_inode(dentry) == i) {
309 sock_hold(s); 309 sock_hold(s);
310 goto found; 310 goto found;
311 } 311 }
@@ -516,20 +516,15 @@ static unsigned int unix_dgram_poll(struct file *, struct socket *,
516 poll_table *); 516 poll_table *);
517static int unix_ioctl(struct socket *, unsigned int, unsigned long); 517static int unix_ioctl(struct socket *, unsigned int, unsigned long);
518static int unix_shutdown(struct socket *, int); 518static int unix_shutdown(struct socket *, int);
519static int unix_stream_sendmsg(struct kiocb *, struct socket *, 519static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t);
520 struct msghdr *, size_t); 520static int unix_stream_recvmsg(struct socket *, struct msghdr *, size_t, int);
521static int unix_stream_recvmsg(struct kiocb *, struct socket *, 521static int unix_dgram_sendmsg(struct socket *, struct msghdr *, size_t);
522 struct msghdr *, size_t, int); 522static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int);
523static int unix_dgram_sendmsg(struct kiocb *, struct socket *,
524 struct msghdr *, size_t);
525static int unix_dgram_recvmsg(struct kiocb *, struct socket *,
526 struct msghdr *, size_t, int);
527static int unix_dgram_connect(struct socket *, struct sockaddr *, 523static int unix_dgram_connect(struct socket *, struct sockaddr *,
528 int, int); 524 int, int);
529static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *, 525static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t);
530 struct msghdr *, size_t); 526static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t,
531static int unix_seqpacket_recvmsg(struct kiocb *, struct socket *, 527 int);
532 struct msghdr *, size_t, int);
533 528
534static int unix_set_peek_off(struct sock *sk, int val) 529static int unix_set_peek_off(struct sock *sk, int val)
535{ 530{
@@ -783,7 +778,7 @@ static struct sock *unix_find_other(struct net *net,
783 err = kern_path(sunname->sun_path, LOOKUP_FOLLOW, &path); 778 err = kern_path(sunname->sun_path, LOOKUP_FOLLOW, &path);
784 if (err) 779 if (err)
785 goto fail; 780 goto fail;
786 inode = path.dentry->d_inode; 781 inode = d_backing_inode(path.dentry);
787 err = inode_permission(inode, MAY_WRITE); 782 err = inode_permission(inode, MAY_WRITE);
788 if (err) 783 if (err)
789 goto put_fail; 784 goto put_fail;
@@ -844,7 +839,7 @@ static int unix_mknod(const char *sun_path, umode_t mode, struct path *res)
844 */ 839 */
845 err = security_path_mknod(&path, dentry, mode, 0); 840 err = security_path_mknod(&path, dentry, mode, 0);
846 if (!err) { 841 if (!err) {
847 err = vfs_mknod(path.dentry->d_inode, dentry, mode, 0); 842 err = vfs_mknod(d_inode(path.dentry), dentry, mode, 0);
848 if (!err) { 843 if (!err) {
849 res->mnt = mntget(path.mnt); 844 res->mnt = mntget(path.mnt);
850 res->dentry = dget(dentry); 845 res->dentry = dget(dentry);
@@ -910,7 +905,7 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
910 goto out_up; 905 goto out_up;
911 } 906 }
912 addr->hash = UNIX_HASH_SIZE; 907 addr->hash = UNIX_HASH_SIZE;
913 hash = path.dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1); 908 hash = d_backing_inode(path.dentry)->i_ino & (UNIX_HASH_SIZE-1);
914 spin_lock(&unix_table_lock); 909 spin_lock(&unix_table_lock);
915 u->path = path; 910 u->path = path;
916 list = &unix_socket_table[hash]; 911 list = &unix_socket_table[hash];
@@ -1442,8 +1437,8 @@ static void maybe_add_creds(struct sk_buff *skb, const struct socket *sock,
1442 * Send AF_UNIX data. 1437 * Send AF_UNIX data.
1443 */ 1438 */
1444 1439
1445static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, 1440static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
1446 struct msghdr *msg, size_t len) 1441 size_t len)
1447{ 1442{
1448 struct sock *sk = sock->sk; 1443 struct sock *sk = sock->sk;
1449 struct net *net = sock_net(sk); 1444 struct net *net = sock_net(sk);
@@ -1622,8 +1617,8 @@ out:
1622 */ 1617 */
1623#define UNIX_SKB_FRAGS_SZ (PAGE_SIZE << get_order(32768)) 1618#define UNIX_SKB_FRAGS_SZ (PAGE_SIZE << get_order(32768))
1624 1619
1625static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, 1620static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1626 struct msghdr *msg, size_t len) 1621 size_t len)
1627{ 1622{
1628 struct sock *sk = sock->sk; 1623 struct sock *sk = sock->sk;
1629 struct sock *other = NULL; 1624 struct sock *other = NULL;
@@ -1725,8 +1720,8 @@ out_err:
1725 return sent ? : err; 1720 return sent ? : err;
1726} 1721}
1727 1722
1728static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock, 1723static int unix_seqpacket_sendmsg(struct socket *sock, struct msghdr *msg,
1729 struct msghdr *msg, size_t len) 1724 size_t len)
1730{ 1725{
1731 int err; 1726 int err;
1732 struct sock *sk = sock->sk; 1727 struct sock *sk = sock->sk;
@@ -1741,19 +1736,18 @@ static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock,
1741 if (msg->msg_namelen) 1736 if (msg->msg_namelen)
1742 msg->msg_namelen = 0; 1737 msg->msg_namelen = 0;
1743 1738
1744 return unix_dgram_sendmsg(kiocb, sock, msg, len); 1739 return unix_dgram_sendmsg(sock, msg, len);
1745} 1740}
1746 1741
1747static int unix_seqpacket_recvmsg(struct kiocb *iocb, struct socket *sock, 1742static int unix_seqpacket_recvmsg(struct socket *sock, struct msghdr *msg,
1748 struct msghdr *msg, size_t size, 1743 size_t size, int flags)
1749 int flags)
1750{ 1744{
1751 struct sock *sk = sock->sk; 1745 struct sock *sk = sock->sk;
1752 1746
1753 if (sk->sk_state != TCP_ESTABLISHED) 1747 if (sk->sk_state != TCP_ESTABLISHED)
1754 return -ENOTCONN; 1748 return -ENOTCONN;
1755 1749
1756 return unix_dgram_recvmsg(iocb, sock, msg, size, flags); 1750 return unix_dgram_recvmsg(sock, msg, size, flags);
1757} 1751}
1758 1752
1759static void unix_copy_addr(struct msghdr *msg, struct sock *sk) 1753static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
@@ -1766,9 +1760,8 @@ static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
1766 } 1760 }
1767} 1761}
1768 1762
1769static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, 1763static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
1770 struct msghdr *msg, size_t size, 1764 size_t size, int flags)
1771 int flags)
1772{ 1765{
1773 struct scm_cookie scm; 1766 struct scm_cookie scm;
1774 struct sock *sk = sock->sk; 1767 struct sock *sk = sock->sk;
@@ -1900,9 +1893,8 @@ static unsigned int unix_skb_len(const struct sk_buff *skb)
1900 return skb->len - UNIXCB(skb).consumed; 1893 return skb->len - UNIXCB(skb).consumed;
1901} 1894}
1902 1895
1903static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock, 1896static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
1904 struct msghdr *msg, size_t size, 1897 size_t size, int flags)
1905 int flags)
1906{ 1898{
1907 struct scm_cookie scm; 1899 struct scm_cookie scm;
1908 struct sock *sk = sock->sk; 1900 struct sock *sk = sock->sk;