aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/cpqarray.c32
1 files changed, 10 insertions, 22 deletions
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
index 28937b661564..9473215956f9 100644
--- a/drivers/block/cpqarray.c
+++ b/drivers/block/cpqarray.c
@@ -1255,17 +1255,11 @@ static int ida_ctlr_ioctl(ctlr_info_t *h, int dsk, ida_ioctl_t *io)
1255 /* Pre submit processing */ 1255 /* Pre submit processing */
1256 switch(io->cmd) { 1256 switch(io->cmd) {
1257 case PASSTHRU_A: 1257 case PASSTHRU_A:
1258 p = kmalloc(io->sg[0].size, GFP_KERNEL); 1258 p = memdup_user(io->sg[0].addr, io->sg[0].size);
1259 if (!p) 1259 if (IS_ERR(p)) {
1260 { 1260 error = PTR_ERR(p);
1261 error = -ENOMEM; 1261 cmd_free(h, c, 0);
1262 cmd_free(h, c, 0); 1262 return error;
1263 return(error);
1264 }
1265 if (copy_from_user(p, io->sg[0].addr, io->sg[0].size)) {
1266 kfree(p);
1267 cmd_free(h, c, 0);
1268 return -EFAULT;
1269 } 1263 }
1270 c->req.hdr.blk = pci_map_single(h->pci_dev, &(io->c), 1264 c->req.hdr.blk = pci_map_single(h->pci_dev, &(io->c),
1271 sizeof(ida_ioctl_t), 1265 sizeof(ida_ioctl_t),
@@ -1296,18 +1290,12 @@ static int ida_ctlr_ioctl(ctlr_info_t *h, int dsk, ida_ioctl_t *io)
1296 case DIAG_PASS_THRU: 1290 case DIAG_PASS_THRU:
1297 case COLLECT_BUFFER: 1291 case COLLECT_BUFFER:
1298 case WRITE_FLASH_ROM: 1292 case WRITE_FLASH_ROM:
1299 p = kmalloc(io->sg[0].size, GFP_KERNEL); 1293 p = memdup_user(io->sg[0].addr, io->sg[0].size);
1300 if (!p) 1294 if (IS_ERR(p)) {
1301 { 1295 error = PTR_ERR(p);
1302 error = -ENOMEM; 1296 cmd_free(h, c, 0);
1303 cmd_free(h, c, 0); 1297 return error;
1304 return(error);
1305 } 1298 }
1306 if (copy_from_user(p, io->sg[0].addr, io->sg[0].size)) {
1307 kfree(p);
1308 cmd_free(h, c, 0);
1309 return -EFAULT;
1310 }
1311 c->req.sg[0].size = io->sg[0].size; 1299 c->req.sg[0].size = io->sg[0].size;
1312 c->req.sg[0].addr = pci_map_single(h->pci_dev, p, 1300 c->req.sg[0].addr = pci_map_single(h->pci_dev, p,
1313 c->req.sg[0].size, PCI_DMA_BIDIRECTIONAL); 1301 c->req.sg[0].size, PCI_DMA_BIDIRECTIONAL);