diff options
| -rw-r--r-- | drivers/vhost/scsi.c | 2 | ||||
| -rw-r--r-- | include/linux/uio.h | 2 | ||||
| -rw-r--r-- | lib/Makefile | 2 | ||||
| -rw-r--r-- | lib/iovec.c | 36 |
4 files changed, 2 insertions, 40 deletions
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c index d695b1673ae5..dc78d87e0fc2 100644 --- a/drivers/vhost/scsi.c +++ b/drivers/vhost/scsi.c | |||
| @@ -1079,7 +1079,7 @@ vhost_scsi_handle_vq(struct vhost_scsi *vs, struct vhost_virtqueue *vq) | |||
| 1079 | req_size, vq->iov[0].iov_len); | 1079 | req_size, vq->iov[0].iov_len); |
| 1080 | break; | 1080 | break; |
| 1081 | } | 1081 | } |
| 1082 | ret = memcpy_fromiovecend(req, &vq->iov[0], 0, req_size); | 1082 | ret = copy_from_user(req, vq->iov[0].iov_base, req_size); |
| 1083 | if (unlikely(ret)) { | 1083 | if (unlikely(ret)) { |
| 1084 | vq_err(vq, "Faulted on virtio_scsi_cmd_req\n"); | 1084 | vq_err(vq, "Faulted on virtio_scsi_cmd_req\n"); |
| 1085 | break; | 1085 | break; |
diff --git a/include/linux/uio.h b/include/linux/uio.h index 02bd8a92038a..3e0cb4ea3905 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h | |||
| @@ -135,6 +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_fromiovecend(unsigned char *kdata, const struct iovec *iov, | ||
| 139 | int offset, int len); | ||
| 140 | #endif | 138 | #endif |
diff --git a/lib/Makefile b/lib/Makefile index 3c3b30b9e020..1071d06398c3 100644 --- a/lib/Makefile +++ b/lib/Makefile | |||
| @@ -24,7 +24,7 @@ obj-y += lockref.o | |||
| 24 | 24 | ||
| 25 | obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ | 25 | obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ |
| 26 | bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \ | 26 | bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \ |
| 27 | gcd.o lcm.o list_sort.o uuid.o flex_array.o iovec.o clz_ctz.o \ | 27 | gcd.o lcm.o list_sort.o uuid.o flex_array.o clz_ctz.o \ |
| 28 | bsearch.o find_last_bit.o find_next_bit.o llist.o memweight.o kfifo.o \ | 28 | bsearch.o find_last_bit.o find_next_bit.o llist.o memweight.o kfifo.o \ |
| 29 | percpu-refcount.o percpu_ida.o rhashtable.o reciprocal_div.o | 29 | percpu-refcount.o percpu_ida.o rhashtable.o reciprocal_div.o |
| 30 | obj-y += string_helpers.o | 30 | obj-y += string_helpers.o |
diff --git a/lib/iovec.c b/lib/iovec.c deleted file mode 100644 index d8f17a9b1ccf..000000000000 --- a/lib/iovec.c +++ /dev/null | |||
| @@ -1,36 +0,0 @@ | |||
| 1 | #include <linux/uaccess.h> | ||
| 2 | #include <linux/export.h> | ||
| 3 | #include <linux/uio.h> | ||
| 4 | |||
| 5 | /* | ||
| 6 | * Copy iovec to kernel. Returns -EFAULT on error. | ||
| 7 | */ | ||
| 8 | |||
| 9 | int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov, | ||
| 10 | int offset, int len) | ||
| 11 | { | ||
| 12 | /* No data? Done! */ | ||
| 13 | if (len == 0) | ||
| 14 | return 0; | ||
| 15 | |||
| 16 | /* Skip over the finished iovecs */ | ||
| 17 | while (offset >= iov->iov_len) { | ||
| 18 | offset -= iov->iov_len; | ||
| 19 | iov++; | ||
| 20 | } | ||
| 21 | |||
| 22 | while (len > 0) { | ||
| 23 | u8 __user *base = iov->iov_base + offset; | ||
| 24 | int copy = min_t(unsigned int, len, iov->iov_len - offset); | ||
| 25 | |||
| 26 | offset = 0; | ||
| 27 | if (copy_from_user(kdata, base, copy)) | ||
| 28 | return -EFAULT; | ||
| 29 | len -= copy; | ||
| 30 | kdata += copy; | ||
| 31 | iov++; | ||
| 32 | } | ||
| 33 | |||
| 34 | return 0; | ||
| 35 | } | ||
| 36 | EXPORT_SYMBOL(memcpy_fromiovecend); | ||
