]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/staging/dream/camera/msm_vfe8x.c
Staging: dream: camera: Use memdup_user
[net-next-2.6.git] / drivers / staging / dream / camera / msm_vfe8x.c
index e61fdba6283867ac56cda2a2c21c557418378936..d87d56f914de832cd3e398abd84f707cd7795729 100644 (file)
@@ -644,17 +644,10 @@ static int vfe_config(struct msm_vfe_cfg_cmd *cmd, void *data)
                if (!axid)
                        return -EFAULT;
 
-               axio =
-                       kmalloc(sizeof(struct vfe_cmd_axi_output_config),
-                               GFP_ATOMIC);
-               if (!axio)
-                       return -ENOMEM;
-
-               if (copy_from_user(axio, (void __user *)(vfecmd.value),
-                       sizeof(struct vfe_cmd_axi_output_config))) {
-                       kfree(axio);
-                       return -EFAULT;
-               }
+               axio = memdup_user((void __user *)(vfecmd.value),
+                                  sizeof(struct vfe_cmd_axi_output_config));
+               if (IS_ERR(axio))
+                       return PTR_ERR(axio);
 
                vfe_config_axi(OUTPUT_1, axid, axio);
                vfe_axi_output_config(axio);
@@ -669,17 +662,10 @@ static int vfe_config(struct msm_vfe_cfg_cmd *cmd, void *data)
                if (!axid)
                        return -EFAULT;
 
-               axio =
-                       kmalloc(sizeof(struct vfe_cmd_axi_output_config),
-                               GFP_ATOMIC);
-               if (!axio)
-                       return -ENOMEM;
-
-               if (copy_from_user(axio, (void __user *)(vfecmd.value),
-                               sizeof(struct vfe_cmd_axi_output_config))) {
-                       kfree(axio);
-                       return -EFAULT;
-               }
+               axio = memdup_user((void __user *)(vfecmd.value),
+                                  sizeof(struct vfe_cmd_axi_output_config));
+               if (IS_ERR(axio))
+                       return PTR_ERR(axio);
 
                vfe_config_axi(OUTPUT_2, axid, axio);
 
@@ -694,17 +680,10 @@ static int vfe_config(struct msm_vfe_cfg_cmd *cmd, void *data)
                if (!axid)
                        return -EFAULT;
 
-               axio =
-                       kmalloc(sizeof(struct vfe_cmd_axi_output_config),
-                               GFP_ATOMIC);
-               if (!axio)
-                       return -ENOMEM;
-
-               if (copy_from_user(axio, (void __user *)(vfecmd.value),
-                       sizeof(struct vfe_cmd_axi_output_config))) {
-                       kfree(axio);
-                       return -EFAULT;
-               }
+               axio = memdup_user((void __user *)(vfecmd.value),
+                                  sizeof(struct vfe_cmd_axi_output_config));
+               if (IS_ERR(axio))
+                       return PTR_ERR(axio);
 
                vfe_config_axi(OUTPUT_1_AND_2,
                        axid, axio);