diff options
Diffstat (limited to 'drivers/message/fusion/mptctl.c')
-rw-r--r-- | drivers/message/fusion/mptctl.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c index 8a050e885688..b0a892a2bf1b 100644 --- a/drivers/message/fusion/mptctl.c +++ b/drivers/message/fusion/mptctl.c | |||
@@ -1261,19 +1261,11 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size) | |||
1261 | else | 1261 | else |
1262 | return -EFAULT; | 1262 | return -EFAULT; |
1263 | 1263 | ||
1264 | karg = kmalloc(data_size, GFP_KERNEL); | 1264 | karg = memdup_user(uarg, data_size); |
1265 | if (karg == NULL) { | 1265 | if (IS_ERR(karg)) { |
1266 | printk(KERN_ERR MYNAM "%s::mpt_ioctl_iocinfo() @%d - no memory available!\n", | 1266 | printk(KERN_ERR MYNAM "%s@%d::mpt_ioctl_iocinfo() - memdup_user returned error [%ld]\n", |
1267 | __FILE__, __LINE__); | 1267 | __FILE__, __LINE__, PTR_ERR(karg)); |
1268 | return -ENOMEM; | 1268 | return PTR_ERR(karg); |
1269 | } | ||
1270 | |||
1271 | if (copy_from_user(karg, uarg, data_size)) { | ||
1272 | printk(KERN_ERR MYNAM "%s@%d::mptctl_getiocinfo - " | ||
1273 | "Unable to read in mpt_ioctl_iocinfo struct @ %p\n", | ||
1274 | __FILE__, __LINE__, uarg); | ||
1275 | kfree(karg); | ||
1276 | return -EFAULT; | ||
1277 | } | 1269 | } |
1278 | 1270 | ||
1279 | if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) || | 1271 | if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) || |