diff options
author | David S. Miller <davem@davemloft.net> | 2015-02-04 23:46:55 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-02-04 23:46:55 -0500 |
commit | f2683b743f2334ef49a5361bf596dd1fbd2c9be4 (patch) | |
tree | 7f53b2614742238e966ba8a815ef6c5079422ee2 /include | |
parent | 9878196578286c5ed494778ada01da094377a686 (diff) | |
parent | 57dd8a0735aabff4862025cf64ad94da3d80e620 (diff) |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
More iov_iter work from Al Viro.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/crypto/if_alg.h | 3 | ||||
-rw-r--r-- | include/linux/skbuff.h | 14 | ||||
-rw-r--r-- | include/linux/socket.h | 7 | ||||
-rw-r--r-- | include/linux/uio.h | 6 | ||||
-rw-r--r-- | include/linux/vmw_vmci_api.h | 2 | ||||
-rw-r--r-- | include/net/ping.h | 2 | ||||
-rw-r--r-- | include/net/sock.h | 18 | ||||
-rw-r--r-- | include/net/udplite.h | 3 |
8 files changed, 18 insertions, 37 deletions
diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h index cd62bf4289e9..88ea64e9a91c 100644 --- a/include/crypto/if_alg.h +++ b/include/crypto/if_alg.h | |||
@@ -67,8 +67,7 @@ int af_alg_unregister_type(const struct af_alg_type *type); | |||
67 | int af_alg_release(struct socket *sock); | 67 | int af_alg_release(struct socket *sock); |
68 | int af_alg_accept(struct sock *sk, struct socket *newsock); | 68 | int af_alg_accept(struct sock *sk, struct socket *newsock); |
69 | 69 | ||
70 | int af_alg_make_sg(struct af_alg_sgl *sgl, void __user *addr, int len, | 70 | int af_alg_make_sg(struct af_alg_sgl *sgl, struct iov_iter *iter, int len); |
71 | int write); | ||
72 | void af_alg_free_sg(struct af_alg_sgl *sgl); | 71 | void af_alg_free_sg(struct af_alg_sgl *sgl); |
73 | 72 | ||
74 | int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con); | 73 | int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con); |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 5405dfe02572..111e665455c3 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -2487,19 +2487,18 @@ static inline int skb_put_padto(struct sk_buff *skb, unsigned int len) | |||
2487 | } | 2487 | } |
2488 | 2488 | ||
2489 | static inline int skb_add_data(struct sk_buff *skb, | 2489 | static inline int skb_add_data(struct sk_buff *skb, |
2490 | char __user *from, int copy) | 2490 | struct iov_iter *from, int copy) |
2491 | { | 2491 | { |
2492 | const int off = skb->len; | 2492 | const int off = skb->len; |
2493 | 2493 | ||
2494 | if (skb->ip_summed == CHECKSUM_NONE) { | 2494 | if (skb->ip_summed == CHECKSUM_NONE) { |
2495 | int err = 0; | 2495 | __wsum csum = 0; |
2496 | __wsum csum = csum_and_copy_from_user(from, skb_put(skb, copy), | 2496 | if (csum_and_copy_from_iter(skb_put(skb, copy), copy, |
2497 | copy, 0, &err); | 2497 | &csum, from) == copy) { |
2498 | if (!err) { | ||
2499 | skb->csum = csum_block_add(skb->csum, csum, off); | 2498 | skb->csum = csum_block_add(skb->csum, csum, off); |
2500 | return 0; | 2499 | return 0; |
2501 | } | 2500 | } |
2502 | } else if (!copy_from_user(skb_put(skb, copy), from, copy)) | 2501 | } else if (copy_from_iter(skb_put(skb, copy), copy, from) == copy) |
2503 | return 0; | 2502 | return 0; |
2504 | 2503 | ||
2505 | __skb_trim(skb, off); | 2504 | __skb_trim(skb, off); |
@@ -2696,8 +2695,7 @@ int skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci); | |||
2696 | 2695 | ||
2697 | static inline int memcpy_from_msg(void *data, struct msghdr *msg, int len) | 2696 | static inline int memcpy_from_msg(void *data, struct msghdr *msg, int len) |
2698 | { | 2697 | { |
2699 | /* XXX: stripping const */ | 2698 | return copy_from_iter(data, len, &msg->msg_iter) == len ? 0 : -EFAULT; |
2700 | return memcpy_fromiovec(data, (struct iovec *)msg->msg_iter.iov, len); | ||
2701 | } | 2699 | } |
2702 | 2700 | ||
2703 | static inline int memcpy_to_msg(struct msghdr *msg, void *data, int len) | 2701 | static inline int memcpy_to_msg(struct msghdr *msg, void *data, int len) |
diff --git a/include/linux/socket.h b/include/linux/socket.h index 6e49a14365dc..5c19cba34dce 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
@@ -318,13 +318,6 @@ struct ucred { | |||
318 | /* IPX options */ | 318 | /* IPX options */ |
319 | #define IPX_TYPE 1 | 319 | #define IPX_TYPE 1 |
320 | 320 | ||
321 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | ||
322 | struct iovec *iov, | ||
323 | int offset, | ||
324 | unsigned int len, __wsum *csump); | ||
325 | extern unsigned long iov_pages(const struct iovec *iov, int offset, | ||
326 | unsigned long nr_segs); | ||
327 | |||
328 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr); | 321 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr); |
329 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); | 322 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
330 | 323 | ||
diff --git a/include/linux/uio.h b/include/linux/uio.h index 1c5e453f7ea9..3e0cb4ea3905 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h | |||
@@ -135,10 +135,4 @@ static inline void iov_iter_reexpand(struct iov_iter *i, size_t count) | |||
135 | size_t csum_and_copy_to_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); | 135 | size_t csum_and_copy_to_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); |
136 | size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); | 136 | size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); |
137 | 137 | ||
138 | int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); | ||
139 | int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov, | ||
140 | int offset, int len); | ||
141 | int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata, | ||
142 | int offset, int len); | ||
143 | |||
144 | #endif | 138 | #endif |
diff --git a/include/linux/vmw_vmci_api.h b/include/linux/vmw_vmci_api.h index 5691f752ce8f..63df3a2a8ce5 100644 --- a/include/linux/vmw_vmci_api.h +++ b/include/linux/vmw_vmci_api.h | |||
@@ -74,7 +74,7 @@ ssize_t vmci_qpair_dequeue(struct vmci_qp *qpair, | |||
74 | ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size, | 74 | ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size, |
75 | int mode); | 75 | int mode); |
76 | ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, | 76 | ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, |
77 | void *iov, size_t iov_size, int mode); | 77 | struct msghdr *msg, size_t iov_size, int mode); |
78 | ssize_t vmci_qpair_dequev(struct vmci_qp *qpair, | 78 | ssize_t vmci_qpair_dequev(struct vmci_qp *qpair, |
79 | struct msghdr *msg, size_t iov_size, int mode); | 79 | struct msghdr *msg, size_t iov_size, int mode); |
80 | ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size, | 80 | ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size, |
diff --git a/include/net/ping.h b/include/net/ping.h index f074060bc5de..cc16d413f681 100644 --- a/include/net/ping.h +++ b/include/net/ping.h | |||
@@ -59,7 +59,7 @@ extern struct pingv6_ops pingv6_ops; | |||
59 | 59 | ||
60 | struct pingfakehdr { | 60 | struct pingfakehdr { |
61 | struct icmphdr icmph; | 61 | struct icmphdr icmph; |
62 | struct iovec *iov; | 62 | struct msghdr *msg; |
63 | sa_family_t family; | 63 | sa_family_t family; |
64 | __wsum wcheck; | 64 | __wsum wcheck; |
65 | }; | 65 | }; |
diff --git a/include/net/sock.h b/include/net/sock.h index 511ef7c8889b..d28b8fededd6 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -1803,27 +1803,25 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags) | |||
1803 | } | 1803 | } |
1804 | 1804 | ||
1805 | static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb, | 1805 | static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb, |
1806 | char __user *from, char *to, | 1806 | struct iov_iter *from, char *to, |
1807 | int copy, int offset) | 1807 | int copy, int offset) |
1808 | { | 1808 | { |
1809 | if (skb->ip_summed == CHECKSUM_NONE) { | 1809 | if (skb->ip_summed == CHECKSUM_NONE) { |
1810 | int err = 0; | 1810 | __wsum csum = 0; |
1811 | __wsum csum = csum_and_copy_from_user(from, to, copy, 0, &err); | 1811 | if (csum_and_copy_from_iter(to, copy, &csum, from) != copy) |
1812 | if (err) | 1812 | return -EFAULT; |
1813 | return err; | ||
1814 | skb->csum = csum_block_add(skb->csum, csum, offset); | 1813 | skb->csum = csum_block_add(skb->csum, csum, offset); |
1815 | } else if (sk->sk_route_caps & NETIF_F_NOCACHE_COPY) { | 1814 | } else if (sk->sk_route_caps & NETIF_F_NOCACHE_COPY) { |
1816 | if (!access_ok(VERIFY_READ, from, copy) || | 1815 | if (copy_from_iter_nocache(to, copy, from) != copy) |
1817 | __copy_from_user_nocache(to, from, copy)) | ||
1818 | return -EFAULT; | 1816 | return -EFAULT; |
1819 | } else if (copy_from_user(to, from, copy)) | 1817 | } else if (copy_from_iter(to, copy, from) != copy) |
1820 | return -EFAULT; | 1818 | return -EFAULT; |
1821 | 1819 | ||
1822 | return 0; | 1820 | return 0; |
1823 | } | 1821 | } |
1824 | 1822 | ||
1825 | static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb, | 1823 | static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb, |
1826 | char __user *from, int copy) | 1824 | struct iov_iter *from, int copy) |
1827 | { | 1825 | { |
1828 | int err, offset = skb->len; | 1826 | int err, offset = skb->len; |
1829 | 1827 | ||
@@ -1835,7 +1833,7 @@ static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb, | |||
1835 | return err; | 1833 | return err; |
1836 | } | 1834 | } |
1837 | 1835 | ||
1838 | static inline int skb_copy_to_page_nocache(struct sock *sk, char __user *from, | 1836 | static inline int skb_copy_to_page_nocache(struct sock *sk, struct iov_iter *from, |
1839 | struct sk_buff *skb, | 1837 | struct sk_buff *skb, |
1840 | struct page *page, | 1838 | struct page *page, |
1841 | int off, int copy) | 1839 | int off, int copy) |
diff --git a/include/net/udplite.h b/include/net/udplite.h index ae7c8d1fbcad..80761938b9a7 100644 --- a/include/net/udplite.h +++ b/include/net/udplite.h | |||
@@ -20,8 +20,7 @@ static __inline__ int udplite_getfrag(void *from, char *to, int offset, | |||
20 | int len, int odd, struct sk_buff *skb) | 20 | int len, int odd, struct sk_buff *skb) |
21 | { | 21 | { |
22 | struct msghdr *msg = from; | 22 | struct msghdr *msg = from; |
23 | /* XXX: stripping const */ | 23 | return copy_from_iter(to, len, &msg->msg_iter) != len ? -EFAULT : 0; |
24 | return memcpy_fromiovecend(to, (struct iovec *)msg->msg_iter.iov, offset, len); | ||
25 | } | 24 | } |
26 | 25 | ||
27 | /* Designate sk as UDP-Lite socket */ | 26 | /* Designate sk as UDP-Lite socket */ |