Use memdup_user() helper instead of open-coding to simplify the code.

Signed-off-by: Geliang Tang <geliangt...@gmail.com>
---
 drivers/net/hippi/rrunner.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c
index 9b0d614..1ce6239 100644
--- a/drivers/net/hippi/rrunner.c
+++ b/drivers/net/hippi/rrunner.c
@@ -1616,17 +1616,14 @@ static int rr_ioctl(struct net_device *dev, struct 
ifreq *rq, int cmd)
                        return -EPERM;
                }
 
-               image = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL);
-               oldimage = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL);
-               if (!image || !oldimage) {
-                       error = -ENOMEM;
-                       goto wf_out;
-               }
+               image = memdup_user(rq->ifr_data, EEPROM_BYTES);
+               if (IS_ERR(image))
+                       return PTR_ERR(image);
 
-               error = copy_from_user(image, rq->ifr_data, EEPROM_BYTES);
-               if (error) {
-                       error = -EFAULT;
-                       goto wf_out;
+               oldimage = kmalloc(EEPROM_BYTES, GFP_KERNEL);
+               if (!oldimage) {
+                       kfree(image);
+                       return -ENOMEM;
                }
 
                if (rrpriv->fw_running){
-- 
2.9.3

Reply via email to