summaryrefslogtreecommitdiffstats
path: root/include/linux/uio.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/uio.h')
-rw-r--r--include/linux/uio.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/uio.h b/include/linux/uio.h
index e67e12adb136..f5766e853a77 100644
--- a/include/linux/uio.h
+++ b/include/linux/uio.h
@@ -154,6 +154,12 @@ size_t _copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i);
154#define _copy_from_iter_flushcache _copy_from_iter_nocache 154#define _copy_from_iter_flushcache _copy_from_iter_nocache
155#endif 155#endif
156 156
157#ifdef CONFIG_ARCH_HAS_UACCESS_MCSAFE
158size_t _copy_to_iter_mcsafe(void *addr, size_t bytes, struct iov_iter *i);
159#else
160#define _copy_to_iter_mcsafe _copy_to_iter
161#endif
162
157static __always_inline __must_check 163static __always_inline __must_check
158size_t copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i) 164size_t copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i)
159{ 165{
@@ -163,6 +169,15 @@ size_t copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i)
163 return _copy_from_iter_flushcache(addr, bytes, i); 169 return _copy_from_iter_flushcache(addr, bytes, i);
164} 170}
165 171
172static __always_inline __must_check
173size_t copy_to_iter_mcsafe(void *addr, size_t bytes, struct iov_iter *i)
174{
175 if (unlikely(!check_copy_size(addr, bytes, false)))
176 return 0;
177 else
178 return _copy_to_iter_mcsafe(addr, bytes, i);
179}
180
166size_t iov_iter_zero(size_t bytes, struct iov_iter *); 181size_t iov_iter_zero(size_t bytes, struct iov_iter *);
167unsigned long iov_iter_alignment(const struct iov_iter *i); 182unsigned long iov_iter_alignment(const struct iov_iter *i);
168unsigned long iov_iter_gap_alignment(const struct iov_iter *i); 183unsigned long iov_iter_gap_alignment(const struct iov_iter *i);