Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Christoph Hellwig and committed by
Artem Bityutskiy
bf07803a 16d8cd7c

+5 -28
+5 -28
drivers/mtd/ubi/cdev.c
··· 414 414 struct ubi_device *ubi = vol->ubi; 415 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 417 switch (cmd) { 429 - 430 418 /* Volume update command */ 431 419 case UBI_IOCVOLUP: 432 420 { ··· 460 472 { 461 473 int32_t lnum; 462 474 463 - err = __get_user(lnum, (__user int32_t *)argp); 475 + err = get_user(lnum, (__user int32_t *)argp); 464 476 if (err) { 465 477 err = -EFAULT; 466 478 break; ··· 576 588 struct ubi_volume_desc *desc; 577 589 void __user *argp = (void __user *)arg; 578 590 579 - if (_IOC_NR(cmd) > UBI_CDEV_IOC_MAX_SEQ || 580 - _IOC_TYPE(cmd) != UBI_IOC_MAGIC) 581 - return -ENOTTY; 582 - 583 - if (_IOC_DIR(cmd) && _IOC_READ) 584 - err = !access_ok(VERIFY_WRITE, argp, _IOC_SIZE(cmd)); 585 - else if (_IOC_DIR(cmd) && _IOC_WRITE) 586 - err = !access_ok(VERIFY_READ, argp, _IOC_SIZE(cmd)); 587 - if (err) 588 - return -EFAULT; 589 - 590 591 if (!capable(CAP_SYS_RESOURCE)) 591 592 return -EPERM; 592 593 ··· 590 613 struct ubi_mkvol_req req; 591 614 592 615 dbg_msg("create volume"); 593 - err = __copy_from_user(&req, argp, 616 + err = copy_from_user(&req, argp, 594 617 sizeof(struct ubi_mkvol_req)); 595 618 if (err) { 596 619 err = -EFAULT; ··· 607 630 if (err) 608 631 break; 609 632 610 - err = __put_user(req.vol_id, (__user int32_t *)argp); 633 + err = put_user(req.vol_id, (__user int32_t *)argp); 611 634 if (err) 612 635 err = -EFAULT; 613 636 ··· 620 643 int vol_id; 621 644 622 645 dbg_msg("remove volume"); 623 - err = __get_user(vol_id, (__user int32_t *)argp); 646 + err = get_user(vol_id, (__user int32_t *)argp); 624 647 if (err) { 625 648 err = -EFAULT; 626 649 break; ··· 647 670 struct ubi_rsvol_req req; 648 671 649 672 dbg_msg("re-size volume"); 650 - err = __copy_from_user(&req, argp, 673 + err = copy_from_user(&req, argp, 651 674 sizeof(struct ubi_rsvol_req)); 652 675 if (err) { 653 676 err = -EFAULT;