msm: camera: fix memory leaks in camera driver

Signed-off-by: Ankit Premrajka <ankitp@codeaurora.org>
diff --git a/drivers/media/video/msm/msm.c b/drivers/media/video/msm/msm.c
index 8d90eef..1f9f667 100644
--- a/drivers/media/video/msm/msm.c
+++ b/drivers/media/video/msm/msm.c
@@ -102,7 +102,7 @@
 		return -EINVAL;
 
 	qcmd = kzalloc(sizeof(struct msm_queue_cmd), GFP_KERNEL);
-	atomic_set(&qcmd->on_heap, 0);
+	atomic_set(&qcmd->on_heap, 1);
 	uptr = command->value;
 	qcmd->command = command;
 
@@ -112,10 +112,13 @@
 			pr_err("%s: user data %d is too big (max %d)\n",
 				__func__, command->length,
 				sizeof(g_server_dev.ctrl_data));
+			free_qcmd(qcmd);
 			return -EINVAL;
 		}
-		if (copy_from_user(command->value, uptr, command->length))
+		if (copy_from_user(command->value, uptr, command->length)) {
+			free_qcmd(qcmd);
 			return -EINVAL;
+		}
 	}
 
 	msm_enqueue(&g_server_dev.ctrl_q, &qcmd->list_control);
@@ -1902,10 +1905,11 @@
 	rc = v4l2_fh_init(eventHandle, pvdev);
 	if (rc < 0)
 		return rc;
-
-	rc = v4l2_event_init(eventHandle);
-	if (rc < 0)
-		return rc;
+	if (eventHandle->events == NULL) {
+		rc = v4l2_event_init(eventHandle);
+		if (rc < 0)
+			return rc;
+	}
 
 	/* queue of max size 30 */
 	rc = v4l2_event_alloc(eventHandle, 30);