msm: camera: tfe: Fix several issues involving access violation in TFE

This change fixes issues involving out-of-bounds, uninitialized access and
NULL pointer dereference.
Out-of-bounds access issue was present in cam_tfe_mgr_get_hw_caps_v2 as
address of pointer was passed to copy_to_user instead of the pointer.
Uninitialized data access with query_isp as it was not initialized before
being passed to copy_to_user in cam_tfe_mgr_get_hw_caps.
NULL pointer dereference in cam_tfe_process_cmd as in case of invalid
argument there was an attempt to print the TFE core index.

CRs-Fixed: 3555879
Change-Id: Ib706eea896a04e1d4e9612e4e763b674c4256e77
Signed-off-by: Abhilash Kumar <quic_krabhi@quicinc.com>
This commit is contained in:
Abhilash Kumar
2023-07-11 11:52:38 +05:30
committed by Alok Chauhan
parent 65c99f19c8
commit 06afbd12b3
2 changed files with 8 additions and 2 deletions

View File

@@ -225,7 +225,7 @@ static int cam_tfe_mgr_get_hw_caps(void *hw_mgr_priv,
uint32_t version = 0; uint32_t version = 0;
struct cam_query_cap_cmd *query = hw_caps_args; struct cam_query_cap_cmd *query = hw_caps_args;
struct cam_tfe_hw_mgr *hw_mgr = hw_mgr_priv; struct cam_tfe_hw_mgr *hw_mgr = hw_mgr_priv;
struct cam_isp_tfe_query_cap_cmd query_isp; struct cam_isp_tfe_query_cap_cmd query_isp = {0};
struct cam_isp_tfe_query_cap_cmd_v2 *query_isp_v2; struct cam_isp_tfe_query_cap_cmd_v2 *query_isp_v2;
query_size = sizeof(struct cam_isp_tfe_query_cap_cmd_v2) + query_size = sizeof(struct cam_isp_tfe_query_cap_cmd_v2) +
@@ -317,7 +317,7 @@ static int cam_tfe_mgr_get_hw_caps_v2(void *hw_mgr_priv,
return -EINVAL; return -EINVAL;
} }
if (copy_to_user(u64_to_user_ptr(query->caps_handle), &query_isp_v2, if (copy_to_user(u64_to_user_ptr(query->caps_handle), query_isp_v2,
(sizeof(struct cam_isp_tfe_query_cap_cmd_v2) + ((query_isp_v2->num_dev - 1) (sizeof(struct cam_isp_tfe_query_cap_cmd_v2) + ((query_isp_v2->num_dev - 1)
* sizeof(struct cam_isp_tfe_dev_cap_info))))) { * sizeof(struct cam_isp_tfe_dev_cap_info))))) {
CAM_ERR(CAM_ISP, "copy to user failed, query cap version %d", CAM_ERR(CAM_ISP, "copy to user failed, query cap version %d",

View File

@@ -3460,6 +3460,12 @@ int cam_tfe_process_cmd(void *hw_priv, uint32_t cmd_type,
rc = -EINVAL; rc = -EINVAL;
break; break;
} }
if (rc) {
CAM_ERR(CAM_ISP, "TFE: %d error with cmd type: %d",
core_info->core_index, cmd_type);
}
return rc; return rc;
} }