diff options
Diffstat (limited to 'drivers/mtd/mtdchar.c')
| -rw-r--r-- | drivers/mtd/mtdchar.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index aef9f4b687c9..d2f331876e4c 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
| @@ -1,6 +1,4 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * $Id: mtdchar.c,v 1.76 2005/11/07 11:14:20 gleixner Exp $ | ||
| 3 | * | ||
| 4 | * Character-device access to raw MTD devices. | 2 | * Character-device access to raw MTD devices. |
| 5 | * | 3 | * |
| 6 | */ | 4 | */ |
| @@ -494,6 +492,7 @@ static int mtd_ioctl(struct inode *inode, struct file *file, | |||
| 494 | { | 492 | { |
| 495 | struct mtd_oob_buf buf; | 493 | struct mtd_oob_buf buf; |
| 496 | struct mtd_oob_ops ops; | 494 | struct mtd_oob_ops ops; |
| 495 | struct mtd_oob_buf __user *user_buf = argp; | ||
| 497 | uint32_t retlen; | 496 | uint32_t retlen; |
| 498 | 497 | ||
| 499 | if(!(file->f_mode & 2)) | 498 | if(!(file->f_mode & 2)) |
| @@ -537,8 +536,7 @@ static int mtd_ioctl(struct inode *inode, struct file *file, | |||
| 537 | if (ops.oobretlen > 0xFFFFFFFFU) | 536 | if (ops.oobretlen > 0xFFFFFFFFU) |
| 538 | ret = -EOVERFLOW; | 537 | ret = -EOVERFLOW; |
| 539 | retlen = ops.oobretlen; | 538 | retlen = ops.oobretlen; |
| 540 | if (copy_to_user(&((struct mtd_oob_buf *)argp)->length, | 539 | if (copy_to_user(&user_buf->length, &retlen, sizeof(buf.length))) |
| 541 | &retlen, sizeof(buf.length))) | ||
| 542 | ret = -EFAULT; | 540 | ret = -EFAULT; |
| 543 | 541 | ||
| 544 | kfree(ops.oobbuf); | 542 | kfree(ops.oobbuf); |
| @@ -592,29 +590,29 @@ static int mtd_ioctl(struct inode *inode, struct file *file, | |||
| 592 | 590 | ||
| 593 | case MEMLOCK: | 591 | case MEMLOCK: |
| 594 | { | 592 | { |
| 595 | struct erase_info_user info; | 593 | struct erase_info_user einfo; |
| 596 | 594 | ||
| 597 | if (copy_from_user(&info, argp, sizeof(info))) | 595 | if (copy_from_user(&einfo, argp, sizeof(einfo))) |
| 598 | return -EFAULT; | 596 | return -EFAULT; |
| 599 | 597 | ||
| 600 | if (!mtd->lock) | 598 | if (!mtd->lock) |
| 601 | ret = -EOPNOTSUPP; | 599 | ret = -EOPNOTSUPP; |
| 602 | else | 600 | else |
| 603 | ret = mtd->lock(mtd, info.start, info.length); | 601 | ret = mtd->lock(mtd, einfo.start, einfo.length); |
| 604 | break; | 602 | break; |
| 605 | } | 603 | } |
| 606 | 604 | ||
| 607 | case MEMUNLOCK: | 605 | case MEMUNLOCK: |
| 608 | { | 606 | { |
| 609 | struct erase_info_user info; | 607 | struct erase_info_user einfo; |
| 610 | 608 | ||
| 611 | if (copy_from_user(&info, argp, sizeof(info))) | 609 | if (copy_from_user(&einfo, argp, sizeof(einfo))) |
| 612 | return -EFAULT; | 610 | return -EFAULT; |
| 613 | 611 | ||
| 614 | if (!mtd->unlock) | 612 | if (!mtd->unlock) |
| 615 | ret = -EOPNOTSUPP; | 613 | ret = -EOPNOTSUPP; |
| 616 | else | 614 | else |
| 617 | ret = mtd->unlock(mtd, info.start, info.length); | 615 | ret = mtd->unlock(mtd, einfo.start, einfo.length); |
| 618 | break; | 616 | break; |
| 619 | } | 617 | } |
| 620 | 618 | ||
| @@ -714,15 +712,15 @@ static int mtd_ioctl(struct inode *inode, struct file *file, | |||
| 714 | 712 | ||
| 715 | case OTPLOCK: | 713 | case OTPLOCK: |
| 716 | { | 714 | { |
| 717 | struct otp_info info; | 715 | struct otp_info oinfo; |
| 718 | 716 | ||
| 719 | if (mfi->mode != MTD_MODE_OTP_USER) | 717 | if (mfi->mode != MTD_MODE_OTP_USER) |
| 720 | return -EINVAL; | 718 | return -EINVAL; |
| 721 | if (copy_from_user(&info, argp, sizeof(info))) | 719 | if (copy_from_user(&oinfo, argp, sizeof(oinfo))) |
| 722 | return -EFAULT; | 720 | return -EFAULT; |
| 723 | if (!mtd->lock_user_prot_reg) | 721 | if (!mtd->lock_user_prot_reg) |
| 724 | return -EOPNOTSUPP; | 722 | return -EOPNOTSUPP; |
| 725 | ret = mtd->lock_user_prot_reg(mtd, info.start, info.length); | 723 | ret = mtd->lock_user_prot_reg(mtd, oinfo.start, oinfo.length); |
| 726 | break; | 724 | break; |
| 727 | } | 725 | } |
| 728 | #endif | 726 | #endif |
