diff options
Diffstat (limited to 'drivers/char/mem.c')
-rw-r--r-- | drivers/char/mem.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/char/mem.c b/drivers/char/mem.c index fba76fb55abf..f0a90590cb1a 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c | |||
@@ -581,14 +581,12 @@ static ssize_t write_kmem(struct file * file, const char __user * buf, | |||
581 | 581 | ||
582 | if (len > PAGE_SIZE) | 582 | if (len > PAGE_SIZE) |
583 | len = PAGE_SIZE; | 583 | len = PAGE_SIZE; |
584 | if (len) { | 584 | written = copy_from_user(kbuf, buf, len); |
585 | written = copy_from_user(kbuf, buf, len); | 585 | if (written) { |
586 | if (written) { | 586 | if (wrote + virtr) |
587 | if (wrote + virtr) | 587 | break; |
588 | break; | 588 | free_page((unsigned long)kbuf); |
589 | free_page((unsigned long)kbuf); | 589 | return -EFAULT; |
590 | return -EFAULT; | ||
591 | } | ||
592 | } | 590 | } |
593 | len = vwrite(kbuf, (char *)p, len); | 591 | len = vwrite(kbuf, (char *)p, len); |
594 | count -= len; | 592 | count -= len; |