diff options
Diffstat (limited to 'net/unix/af_unix.c')
-rw-r--r-- | net/unix/af_unix.c | 58 |
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 *); |
517 | static int unix_ioctl(struct socket *, unsigned int, unsigned long); | 517 | static int unix_ioctl(struct socket *, unsigned int, unsigned long); |
518 | static int unix_shutdown(struct socket *, int); | 518 | static int unix_shutdown(struct socket *, int); |
519 | static int unix_stream_sendmsg(struct kiocb *, struct socket *, | 519 | static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t); |
520 | struct msghdr *, size_t); | 520 | static int unix_stream_recvmsg(struct socket *, struct msghdr *, size_t, int); |
521 | static int unix_stream_recvmsg(struct kiocb *, struct socket *, | 521 | static int unix_dgram_sendmsg(struct socket *, struct msghdr *, size_t); |
522 | struct msghdr *, size_t, int); | 522 | static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int); |
523 | static int unix_dgram_sendmsg(struct kiocb *, struct socket *, | ||
524 | struct msghdr *, size_t); | ||
525 | static int unix_dgram_recvmsg(struct kiocb *, struct socket *, | ||
526 | struct msghdr *, size_t, int); | ||
527 | static int unix_dgram_connect(struct socket *, struct sockaddr *, | 523 | static int unix_dgram_connect(struct socket *, struct sockaddr *, |
528 | int, int); | 524 | int, int); |
529 | static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *, | 525 | static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t); |
530 | struct msghdr *, size_t); | 526 | static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t, |
531 | static int unix_seqpacket_recvmsg(struct kiocb *, struct socket *, | 527 | int); |
532 | struct msghdr *, size_t, int); | ||
533 | 528 | ||
534 | static int unix_set_peek_off(struct sock *sk, int val) | 529 | static 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 | ||
1445 | static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, | 1440 | static 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 | ||
1625 | static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, | 1620 | static 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 | ||
1728 | static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock, | 1723 | static 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 | ||
1747 | static int unix_seqpacket_recvmsg(struct kiocb *iocb, struct socket *sock, | 1742 | static 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 | ||
1759 | static void unix_copy_addr(struct msghdr *msg, struct sock *sk) | 1753 | static 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 | ||
1769 | static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, | 1763 | static 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 | ||
1903 | static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock, | 1896 | static 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; |