diff options
Diffstat (limited to 'drivers/net/wan/lmc/lmc_main.c')
-rw-r--r-- | drivers/net/wan/lmc/lmc_main.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/net/wan/lmc/lmc_main.c b/drivers/net/wan/lmc/lmc_main.c index 37b1e0d03e31..90a4ad9a2d08 100644 --- a/drivers/net/wan/lmc/lmc_main.c +++ b/drivers/net/wan/lmc/lmc_main.c | |||
@@ -494,18 +494,11 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/ | |||
494 | break; | 494 | break; |
495 | } | 495 | } |
496 | 496 | ||
497 | data = kmalloc(xc.len, GFP_KERNEL); | 497 | data = memdup_user(xc.data, xc.len); |
498 | if (!data) { | 498 | if (IS_ERR(data)) { |
499 | ret = -ENOMEM; | 499 | ret = PTR_ERR(data); |
500 | break; | 500 | break; |
501 | } | 501 | } |
502 | |||
503 | if(copy_from_user(data, xc.data, xc.len)) | ||
504 | { | ||
505 | kfree(data); | ||
506 | ret = -ENOMEM; | ||
507 | break; | ||
508 | } | ||
509 | 502 | ||
510 | printk("%s: Starting load of data Len: %d at 0x%p == 0x%p\n", dev->name, xc.len, xc.data, data); | 503 | printk("%s: Starting load of data Len: %d at 0x%p == 0x%p\n", dev->name, xc.len, xc.data, data); |
511 | 504 | ||