Skip to content

Commit

Permalink
Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/ker…
Browse files Browse the repository at this point in the history
…nel/git/rusty/linux

Pull virtio fixes from Rusty Russell:
 "A build fix and a uapi exposure fix.  The build fix is later than I
  liked, but my first version broke linux-next due to overzealous header
  clean."

* tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux:
  virtio_console: fix uapi header
  Hoist memcpy_fromiovec/memcpy_toiovec into lib/
  • Loading branch information
torvalds committed May 22, 2013
2 parents 519fe2e + 6407d75 commit 94f1be9
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 56 deletions.
2 changes: 1 addition & 1 deletion drivers/misc/vmw_vmci/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

config VMWARE_VMCI
tristate "VMware VMCI Driver"
depends on X86 && PCI && NET
depends on X86 && PCI
help
This is VMware's Virtual Machine Communication Interface. It enables
high-speed communication between host and guest in a virtual
Expand Down
2 changes: 1 addition & 1 deletion drivers/misc/vmw_vmci/vmci_queue_pair.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include <linux/pagemap.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/socket.h>
#include <linux/uio.h>
#include <linux/wait.h>
#include <linux/vmalloc.h>

Expand Down
2 changes: 0 additions & 2 deletions include/linux/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,6 @@ struct ucred {

extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred);

extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov,
int offset, int len);
extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
Expand All @@ -314,7 +313,6 @@ extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
unsigned int len, __wsum *csump);

extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *address, int mode);
extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len);
extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata,
int offset, int len);
extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr);
Expand Down
3 changes: 3 additions & 0 deletions include/linux/uio.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,7 @@ static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs)
}

unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to);

int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
int memcpy_toiovec(struct iovec *iov, unsigned char *kdata, int len);
#endif
2 changes: 1 addition & 1 deletion include/uapi/linux/virtio_console.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
#define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */
#define VIRTIO_CONSOLE_F_MULTIPORT 1 /* Does host provide multiple ports? */

#define VIRTIO_CONSOLE_BAD_ID (~(u32)0)
#define VIRTIO_CONSOLE_BAD_ID (~(__u32)0)

struct virtio_console_config {
/* colums of the screens */
Expand Down
2 changes: 1 addition & 1 deletion lib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ endif

lib-y := ctype.o string.o vsprintf.o cmdline.o \
rbtree.o radix-tree.o dump_stack.o timerqueue.o\
idr.o int_sqrt.o extable.o \
idr.o int_sqrt.o extable.o iovec.o \
sha1.o md5.o irq_regs.o reciprocal_div.o argv_split.o \
proportions.o flex_proportions.o prio_heap.o ratelimit.o show_mem.o \
is_single_threaded.o plist.o decompress.o kobject_uevent.o \
Expand Down
53 changes: 53 additions & 0 deletions lib/iovec.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include <linux/uaccess.h>
#include <linux/export.h>
#include <linux/uio.h>

/*
* Copy iovec to kernel. Returns -EFAULT on error.
*
* Note: this modifies the original iovec.
*/

int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len)
{
while (len > 0) {
if (iov->iov_len) {
int copy = min_t(unsigned int, len, iov->iov_len);
if (copy_from_user(kdata, iov->iov_base, copy))
return -EFAULT;
len -= copy;
kdata += copy;
iov->iov_base += copy;
iov->iov_len -= copy;
}
iov++;
}

return 0;
}
EXPORT_SYMBOL(memcpy_fromiovec);

/*
* Copy kernel to iovec. Returns -EFAULT on error.
*
* Note: this modifies the original iovec.
*/

int memcpy_toiovec(struct iovec *iov, unsigned char *kdata, int len)
{
while (len > 0) {
if (iov->iov_len) {
int copy = min_t(unsigned int, iov->iov_len, len);
if (copy_to_user(iov->iov_base, kdata, copy))
return -EFAULT;
kdata += copy;
len -= copy;
iov->iov_len -= copy;
iov->iov_base += copy;
}
iov++;
}

return 0;
}
EXPORT_SYMBOL(memcpy_toiovec);
50 changes: 0 additions & 50 deletions net/core/iovec.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,31 +73,6 @@ int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *a
return err;
}

/*
* Copy kernel to iovec. Returns -EFAULT on error.
*
* Note: this modifies the original iovec.
*/

int memcpy_toiovec(struct iovec *iov, unsigned char *kdata, int len)
{
while (len > 0) {
if (iov->iov_len) {
int copy = min_t(unsigned int, iov->iov_len, len);
if (copy_to_user(iov->iov_base, kdata, copy))
return -EFAULT;
kdata += copy;
len -= copy;
iov->iov_len -= copy;
iov->iov_base += copy;
}
iov++;
}

return 0;
}
EXPORT_SYMBOL(memcpy_toiovec);

/*
* Copy kernel to iovec. Returns -EFAULT on error.
*/
Expand All @@ -124,31 +99,6 @@ int memcpy_toiovecend(const struct iovec *iov, unsigned char *kdata,
}
EXPORT_SYMBOL(memcpy_toiovecend);

/*
* Copy iovec to kernel. Returns -EFAULT on error.
*
* Note: this modifies the original iovec.
*/

int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len)
{
while (len > 0) {
if (iov->iov_len) {
int copy = min_t(unsigned int, len, iov->iov_len);
if (copy_from_user(kdata, iov->iov_base, copy))
return -EFAULT;
len -= copy;
kdata += copy;
iov->iov_base += copy;
iov->iov_len -= copy;
}
iov++;
}

return 0;
}
EXPORT_SYMBOL(memcpy_fromiovec);

/*
* Copy iovec from kernel. Returns -EFAULT on error.
*/
Expand Down

0 comments on commit 94f1be9

Please sign in to comment.