OSDN Git Service

msm: sensor: Validationg function pointers before using them
authorSureshnaidu Laveti <lsuresh@codeaurora.org>
Fri, 4 Nov 2016 11:36:27 +0000 (04:36 -0700)
committerSureshnaidu Laveti <lsuresh@codeaurora.org>
Mon, 7 Nov 2016 05:44:16 +0000 (21:44 -0800)
Since IOCTLS can come in any order, validating the actuator
function table and methods before accessing them.

CRs-Fixed: 1084177
Change-Id: Ic6fce52fdf4d1420c2b707ec9bc9cba045066a13
Signed-off-by: Sureshnaidu Laveti <lsuresh@codeaurora.org>
drivers/media/platform/msm/camera_v2/sensor/actuator/msm_actuator.c

index a700f83..b413bf3 100644 (file)
@@ -1396,7 +1396,7 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
 {
        struct msm_actuator_cfg_data *cdata =
                (struct msm_actuator_cfg_data *)argp;
-       int32_t rc = 0;
+       int32_t rc = -EINVAL;
        mutex_lock(a_ctrl->actuator_mutex);
        CDBG("Enter\n");
        CDBG("%s type %d\n", __func__, cdata->cfgtype);
@@ -1406,7 +1406,7 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
                a_ctrl->actuator_state == ACT_DISABLE_STATE) {
                pr_err("actuator disabled %d\n", rc);
                mutex_unlock(a_ctrl->actuator_mutex);
-               return -EINVAL;
+               return rc;
        }
 
        switch (cdata->cfgtype) {
@@ -1427,15 +1427,19 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
                break;
 
        case CFG_SET_DEFAULT_FOCUS:
-               rc = a_ctrl->func_tbl->actuator_set_default_focus(a_ctrl,
-                       &cdata->cfg.move);
+               if (a_ctrl->func_tbl &&
+                       a_ctrl->func_tbl->actuator_set_default_focus)
+                       rc = a_ctrl->func_tbl->actuator_set_default_focus(
+                               a_ctrl, &cdata->cfg.move);
                if (rc < 0)
                        pr_err("move focus failed %d\n", rc);
                break;
 
        case CFG_MOVE_FOCUS:
-               rc = a_ctrl->func_tbl->actuator_move_focus(a_ctrl,
-                       &cdata->cfg.move);
+               if (a_ctrl->func_tbl &&
+                       a_ctrl->func_tbl->actuator_move_focus)
+                       rc = a_ctrl->func_tbl->actuator_move_focus(a_ctrl,
+                               &cdata->cfg.move);
                if (rc < 0)
                        pr_err("move focus failed %d\n", rc);
                break;
@@ -1446,8 +1450,10 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
                break;
 
        case CFG_SET_POSITION:
-               rc = a_ctrl->func_tbl->actuator_set_position(a_ctrl,
-                       &cdata->cfg.setpos);
+               if (a_ctrl->func_tbl &&
+                       a_ctrl->func_tbl->actuator_set_position)
+                       rc = a_ctrl->func_tbl->actuator_set_position(a_ctrl,
+                               &cdata->cfg.setpos);
                if (rc < 0)
                        pr_err("actuator_set_position failed %d\n", rc);
                break;