aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2007-05-17 10:32:10 -0400
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2007-07-18 09:53:36 -0400
commitbf07803a6827ef8d4c9d840a1de800ba36db0213 (patch)
tree35634c88d81dbacc2b12db25755845370d6f7e59 /drivers
parent16d8cd7ce408a20db1ab192e0fb565573e446b28 (diff)
UBI: cleanup ioctl handling
- don't do access_ok + get/put user but use the proper macro - remove useless checks Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mtd/ubi/cdev.c33
1 files changed, 5 insertions, 28 deletions
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
index 5fc9fd457e69..fb238d7ade35 100644
--- a/drivers/mtd/ubi/cdev.c
+++ b/drivers/mtd/ubi/cdev.c
@@ -414,19 +414,7 @@ static int vol_cdev_ioctl(struct inode *inode, struct file *file,
414 struct ubi_device *ubi = vol->ubi; 414 struct ubi_device *ubi = vol->ubi;
415 void __user *argp = (void __user *)arg; 415 void __user *argp = (void __user *)arg;
416 416
417 if (_IOC_NR(cmd) > VOL_CDEV_IOC_MAX_SEQ ||
418 _IOC_TYPE(cmd) != UBI_VOL_IOC_MAGIC)
419 return -ENOTTY;
420
421 if (_IOC_DIR(cmd) && _IOC_READ)
422 err = !access_ok(VERIFY_WRITE, argp, _IOC_SIZE(cmd));
423 else if (_IOC_DIR(cmd) && _IOC_WRITE)
424 err = !access_ok(VERIFY_READ, argp, _IOC_SIZE(cmd));
425 if (err)
426 return -EFAULT;
427
428 switch (cmd) { 417 switch (cmd) {
429
430 /* Volume update command */ 418 /* Volume update command */
431 case UBI_IOCVOLUP: 419 case UBI_IOCVOLUP:
432 { 420 {
@@ -472,7 +460,7 @@ static int vol_cdev_ioctl(struct inode *inode, struct file *file,
472 { 460 {
473 int32_t lnum; 461 int32_t lnum;
474 462
475 err = __get_user(lnum, (__user int32_t *)argp); 463 err = get_user(lnum, (__user int32_t *)argp);
476 if (err) { 464 if (err) {
477 err = -EFAULT; 465 err = -EFAULT;
478 break; 466 break;
@@ -588,17 +576,6 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file,
588 struct ubi_volume_desc *desc; 576 struct ubi_volume_desc *desc;
589 void __user *argp = (void __user *)arg; 577 void __user *argp = (void __user *)arg;
590 578
591 if (_IOC_NR(cmd) > UBI_CDEV_IOC_MAX_SEQ ||
592 _IOC_TYPE(cmd) != UBI_IOC_MAGIC)
593 return -ENOTTY;
594
595 if (_IOC_DIR(cmd) && _IOC_READ)
596 err = !access_ok(VERIFY_WRITE, argp, _IOC_SIZE(cmd));
597 else if (_IOC_DIR(cmd) && _IOC_WRITE)
598 err = !access_ok(VERIFY_READ, argp, _IOC_SIZE(cmd));
599 if (err)
600 return -EFAULT;
601
602 if (!capable(CAP_SYS_RESOURCE)) 579 if (!capable(CAP_SYS_RESOURCE))
603 return -EPERM; 580 return -EPERM;
604 581
@@ -613,7 +590,7 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file,
613 struct ubi_mkvol_req req; 590 struct ubi_mkvol_req req;
614 591
615 dbg_msg("create volume"); 592 dbg_msg("create volume");
616 err = __copy_from_user(&req, argp, 593 err = copy_from_user(&req, argp,
617 sizeof(struct ubi_mkvol_req)); 594 sizeof(struct ubi_mkvol_req));
618 if (err) { 595 if (err) {
619 err = -EFAULT; 596 err = -EFAULT;
@@ -630,7 +607,7 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file,
630 if (err) 607 if (err)
631 break; 608 break;
632 609
633 err = __put_user(req.vol_id, (__user int32_t *)argp); 610 err = put_user(req.vol_id, (__user int32_t *)argp);
634 if (err) 611 if (err)
635 err = -EFAULT; 612 err = -EFAULT;
636 613
@@ -643,7 +620,7 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file,
643 int vol_id; 620 int vol_id;
644 621
645 dbg_msg("remove volume"); 622 dbg_msg("remove volume");
646 err = __get_user(vol_id, (__user int32_t *)argp); 623 err = get_user(vol_id, (__user int32_t *)argp);
647 if (err) { 624 if (err) {
648 err = -EFAULT; 625 err = -EFAULT;
649 break; 626 break;
@@ -670,7 +647,7 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file,
670 struct ubi_rsvol_req req; 647 struct ubi_rsvol_req req;
671 648
672 dbg_msg("re-size volume"); 649 dbg_msg("re-size volume");
673 err = __copy_from_user(&req, argp, 650 err = copy_from_user(&req, argp,
674 sizeof(struct ubi_rsvol_req)); 651 sizeof(struct ubi_rsvol_req));
675 if (err) { 652 if (err) {
676 err = -EFAULT; 653 err = -EFAULT;