diff options
Diffstat (limited to 'drivers/char/pcmcia/cm4000_cs.c')
-rw-r--r-- | drivers/char/pcmcia/cm4000_cs.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c index ef011ef5dc46..61681c9f3f72 100644 --- a/drivers/char/pcmcia/cm4000_cs.c +++ b/drivers/char/pcmcia/cm4000_cs.c | |||
@@ -1444,6 +1444,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
1444 | dev_link_t *link; | 1444 | dev_link_t *link; |
1445 | int size; | 1445 | int size; |
1446 | int rc; | 1446 | int rc; |
1447 | void __user *argp = (void __user *)arg; | ||
1447 | #ifdef PCMCIA_DEBUG | 1448 | #ifdef PCMCIA_DEBUG |
1448 | char *ioctl_names[CM_IOC_MAXNR + 1] = { | 1449 | char *ioctl_names[CM_IOC_MAXNR + 1] = { |
1449 | [_IOC_NR(CM_IOCGSTATUS)] "CM_IOCGSTATUS", | 1450 | [_IOC_NR(CM_IOCGSTATUS)] "CM_IOCGSTATUS", |
@@ -1481,11 +1482,11 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
1481 | _IOC_DIR(cmd), _IOC_READ, _IOC_WRITE, size, cmd); | 1482 | _IOC_DIR(cmd), _IOC_READ, _IOC_WRITE, size, cmd); |
1482 | 1483 | ||
1483 | if (_IOC_DIR(cmd) & _IOC_READ) { | 1484 | if (_IOC_DIR(cmd) & _IOC_READ) { |
1484 | if (!access_ok(VERIFY_WRITE, (void *)arg, size)) | 1485 | if (!access_ok(VERIFY_WRITE, argp, size)) |
1485 | return -EFAULT; | 1486 | return -EFAULT; |
1486 | } | 1487 | } |
1487 | if (_IOC_DIR(cmd) & _IOC_WRITE) { | 1488 | if (_IOC_DIR(cmd) & _IOC_WRITE) { |
1488 | if (!access_ok(VERIFY_READ, (void *)arg, size)) | 1489 | if (!access_ok(VERIFY_READ, argp, size)) |
1489 | return -EFAULT; | 1490 | return -EFAULT; |
1490 | } | 1491 | } |
1491 | 1492 | ||
@@ -1506,14 +1507,14 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
1506 | status |= CM_NO_READER; | 1507 | status |= CM_NO_READER; |
1507 | if (test_bit(IS_BAD_CARD, &dev->flags)) | 1508 | if (test_bit(IS_BAD_CARD, &dev->flags)) |
1508 | status |= CM_BAD_CARD; | 1509 | status |= CM_BAD_CARD; |
1509 | if (copy_to_user((int *)arg, &status, sizeof(int))) | 1510 | if (copy_to_user(argp, &status, sizeof(int))) |
1510 | return -EFAULT; | 1511 | return -EFAULT; |
1511 | } | 1512 | } |
1512 | return 0; | 1513 | return 0; |
1513 | case CM_IOCGATR: | 1514 | case CM_IOCGATR: |
1514 | DEBUGP(4, dev, "... in CM_IOCGATR\n"); | 1515 | DEBUGP(4, dev, "... in CM_IOCGATR\n"); |
1515 | { | 1516 | { |
1516 | struct atreq *atreq = (struct atreq *) arg; | 1517 | struct atreq __user *atreq = argp; |
1517 | int tmp; | 1518 | int tmp; |
1518 | /* allow nonblocking io and being interrupted */ | 1519 | /* allow nonblocking io and being interrupted */ |
1519 | if (wait_event_interruptible | 1520 | if (wait_event_interruptible |
@@ -1597,7 +1598,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
1597 | { | 1598 | { |
1598 | struct ptsreq krnptsreq; | 1599 | struct ptsreq krnptsreq; |
1599 | 1600 | ||
1600 | if (copy_from_user(&krnptsreq, (struct ptsreq *) arg, | 1601 | if (copy_from_user(&krnptsreq, argp, |
1601 | sizeof(struct ptsreq))) | 1602 | sizeof(struct ptsreq))) |
1602 | return -EFAULT; | 1603 | return -EFAULT; |
1603 | 1604 | ||
@@ -1641,7 +1642,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
1641 | int old_pc_debug = 0; | 1642 | int old_pc_debug = 0; |
1642 | 1643 | ||
1643 | old_pc_debug = pc_debug; | 1644 | old_pc_debug = pc_debug; |
1644 | if (copy_from_user(&pc_debug, (int *)arg, sizeof(int))) | 1645 | if (copy_from_user(&pc_debug, argp, sizeof(int))) |
1645 | return -EFAULT; | 1646 | return -EFAULT; |
1646 | 1647 | ||
1647 | if (old_pc_debug != pc_debug) | 1648 | if (old_pc_debug != pc_debug) |