Browse Source

msm: camera: isp: Fix some kw issues

This change fixes kw issues such as possible memory leak
and value is never used after assignment.

CRs-Fixed: 3574742
Change-Id: I757e055dbeeb308e4c115727774f183f8aae41be
Signed-off-by: Stark Lin <[email protected]>
Stark Lin 1 year ago
parent
commit
8ac893d982

+ 34 - 20
drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c

@@ -6689,7 +6689,7 @@ static int cam_ife_hw_mgr_sfe_irq_inject_or_dump_desc(
 	struct cam_isp_irq_inject_param *params,
 	struct cam_isp_irq_inject_param *params,
 	bool dump_irq_desc)
 	bool dump_irq_desc)
 {
 {
-	int i, rc = 0, offset = 0;
+	int i, rc = 0;
 	char *line_buf = NULL;
 	char *line_buf = NULL;
 	struct cam_hw_intf *hw_intf = NULL;
 	struct cam_hw_intf *hw_intf = NULL;
 
 
@@ -6715,11 +6715,11 @@ static int cam_ife_hw_mgr_sfe_irq_inject_or_dump_desc(
 			CAM_ISP_HW_CMD_IRQ_INJECTION, params,
 			CAM_ISP_HW_CMD_IRQ_INJECTION, params,
 			sizeof(struct cam_isp_irq_inject_param));
 			sizeof(struct cam_isp_irq_inject_param));
 		if (rc)
 		if (rc)
-			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
+			scnprintf(line_buf, LINE_BUFFER_LEN,
 				"Injecting IRQ %x failed for SFE at req: %d\n",
 				"Injecting IRQ %x failed for SFE at req: %d\n",
 				params->irq_mask, params->req_id);
 				params->irq_mask, params->req_id);
 		else
 		else
-			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
+			scnprintf(line_buf, LINE_BUFFER_LEN,
 				"IRQ %#x injected for SFE at req: %d\n",
 				"IRQ %#x injected for SFE at req: %d\n",
 				params->irq_mask, params->req_id);
 				params->irq_mask, params->req_id);
 		break;
 		break;
@@ -6740,7 +6740,7 @@ static int cam_ife_hw_mgr_vfe_irq_inject_or_dump_desc(
 	struct cam_isp_irq_inject_param *params,
 	struct cam_isp_irq_inject_param *params,
 	bool dump_irq_desc)
 	bool dump_irq_desc)
 {
 {
-	int i, rc = 0, offset = 0;
+	int i, rc = 0;
 	char *line_buf = NULL;
 	char *line_buf = NULL;
 	struct cam_hw_intf *hw_intf = NULL;
 	struct cam_hw_intf *hw_intf = NULL;
 
 
@@ -6766,11 +6766,11 @@ static int cam_ife_hw_mgr_vfe_irq_inject_or_dump_desc(
 			CAM_ISP_HW_CMD_IRQ_INJECTION, params,
 			CAM_ISP_HW_CMD_IRQ_INJECTION, params,
 			sizeof(struct cam_isp_irq_inject_param));
 			sizeof(struct cam_isp_irq_inject_param));
 		if (rc)
 		if (rc)
-			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
+			scnprintf(line_buf, LINE_BUFFER_LEN,
 				"Injecting IRQ %x failed for IFE at req: %d\n",
 				"Injecting IRQ %x failed for IFE at req: %d\n",
 				params->irq_mask, params->req_id);
 				params->irq_mask, params->req_id);
 		else
 		else
-			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
+			scnprintf(line_buf, LINE_BUFFER_LEN,
 				"IRQ %#x injected for IFE at req: %d\n",
 				"IRQ %#x injected for IFE at req: %d\n",
 				params->irq_mask, params->req_id);
 				params->irq_mask, params->req_id);
 		break;
 		break;
@@ -6791,7 +6791,7 @@ static int cam_ife_hw_mgr_csid_irq_inject_or_dump_desc(
 	struct cam_isp_irq_inject_param *params,
 	struct cam_isp_irq_inject_param *params,
 	bool dump_irq_desc)
 	bool dump_irq_desc)
 {
 {
-	int i, rc = 0, offset = 0;
+	int i, rc = 0;
 	char *line_buf = NULL;
 	char *line_buf = NULL;
 	struct cam_hw_intf *hw_intf = NULL;
 	struct cam_hw_intf *hw_intf = NULL;
 
 
@@ -6817,11 +6817,11 @@ static int cam_ife_hw_mgr_csid_irq_inject_or_dump_desc(
 			CAM_ISP_HW_CMD_IRQ_INJECTION, params,
 			CAM_ISP_HW_CMD_IRQ_INJECTION, params,
 			sizeof(struct cam_isp_irq_inject_param));
 			sizeof(struct cam_isp_irq_inject_param));
 		if (rc)
 		if (rc)
-			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
+			scnprintf(line_buf, LINE_BUFFER_LEN,
 				"Injecting IRQ %x failed for CSID at req: %d\n",
 				"Injecting IRQ %x failed for CSID at req: %d\n",
 				params->irq_mask, params->req_id);
 				params->irq_mask, params->req_id);
 		else
 		else
-			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
+			scnprintf(line_buf, LINE_BUFFER_LEN,
 				"IRQ %#x injected for CSID at req: %d\n",
 				"IRQ %#x injected for CSID at req: %d\n",
 				params->irq_mask, params->req_id);
 				params->irq_mask, params->req_id);
 		break;
 		break;
@@ -16011,7 +16011,8 @@ static int cam_isp_irq_inject_parse_common_params(
 		 rc = -EINVAL;
 		 rc = -EINVAL;
 	}
 	}
 
 
-	strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
+	if (offset <= LINE_BUFFER_LEN)
+		strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
 
 
 	kfree(line_buf);
 	kfree(line_buf);
 	return rc;
 	return rc;
@@ -16037,7 +16038,7 @@ static int cam_isp_irq_inject_command_parser(
 		if (rc) {
 		if (rc) {
 			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
 			offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
 				"Parsed Command failed rc: %d\n", rc);
 				"Parsed Command failed rc: %d\n", rc);
-			return rc;
+			goto end;
 		}
 		}
 
 
 		param_index++;
 		param_index++;
@@ -16050,13 +16051,17 @@ static int cam_isp_irq_inject_command_parser(
 		offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
 		offset += scnprintf(line_buf + offset, LINE_BUFFER_LEN - offset,
 			"Insufficient parameters passed for total parameters: %u\n",
 			"Insufficient parameters passed for total parameters: %u\n",
 			param_index);
 			param_index);
-		return -EINVAL;
+		rc = -EINVAL;
+		goto end;
 	}
 	}
 
 
-	strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
+	if (offset <= LINE_BUFFER_LEN)
+		strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
 
 
+	rc = param_index;
+end:
 	kfree(line_buf);
 	kfree(line_buf);
-	return param_index;
+	return rc;
 }
 }
 
 
 static ssize_t cam_isp_irq_injection_read(struct file *file,
 static ssize_t cam_isp_irq_injection_read(struct file *file,
@@ -16074,8 +16079,10 @@ static ssize_t cam_isp_irq_injection_read(struct file *file,
 
 
 	if (!(*ppos) && strlen(irq_inject_display_buf))
 	if (!(*ppos) && strlen(irq_inject_display_buf))
 		goto end;
 		goto end;
-	else if ((*ppos) && (strlen(irq_inject_display_buf) == 0))
+	else if ((*ppos) && (strlen(irq_inject_display_buf) == 0)) {
+		kfree(line_buf);
 		return 0;
 		return 0;
+	}
 
 
 	strlcat(irq_inject_display_buf, IRQ_INJECT_USAGE_STRING, IRQ_INJECT_DISPLAY_BUF_LEN);
 	strlcat(irq_inject_display_buf, IRQ_INJECT_USAGE_STRING, IRQ_INJECT_DISPLAY_BUF_LEN);
 
 
@@ -16098,8 +16105,10 @@ static ssize_t cam_isp_irq_injection_read(struct file *file,
 	strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
 	strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
 
 
 end:
 end:
-	if (clear_user(ubuf, size))
+	if (clear_user(ubuf, size)) {
+		kfree(line_buf);
 		return -EIO;
 		return -EIO;
+	}
 	count = simple_read_from_buffer(ubuf, size, ppos, irq_inject_display_buf,
 	count = simple_read_from_buffer(ubuf, size, ppos, irq_inject_display_buf,
 		strlen(irq_inject_display_buf));
 		strlen(irq_inject_display_buf));
 
 
@@ -16125,8 +16134,10 @@ static ssize_t cam_isp_irq_injection_write(struct file *file,
 
 
 	memset(irq_inject_display_buf, '\0', IRQ_INJECT_DISPLAY_BUF_LEN);
 	memset(irq_inject_display_buf, '\0', IRQ_INJECT_DISPLAY_BUF_LEN);
 
 
-	if (copy_from_user(input_buf, ubuf, sizeof(input_buf)))
-		return -EFAULT;
+	if (copy_from_user(input_buf, ubuf, sizeof(input_buf))) {
+		rc = -EFAULT;
+		goto end;
+	}
 
 
 	msg = input_buf;
 	msg = input_buf;
 
 
@@ -16157,10 +16168,13 @@ static ssize_t cam_isp_irq_injection_write(struct file *file,
 		break;
 		break;
 	}
 	}
 
 
-	strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
+	if (offset <= LINE_BUFFER_LEN)
+		strlcat(irq_inject_display_buf, line_buf, IRQ_INJECT_DISPLAY_BUF_LEN);
 
 
+	rc = size;
+end:
 	kfree(line_buf);
 	kfree(line_buf);
-	return size;
+	return rc;
 }
 }
 
 
 static const struct file_operations cam_isp_irq_injection = {
 static const struct file_operations cam_isp_irq_injection = {

+ 1 - 1
drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.c

@@ -6601,7 +6601,7 @@ static int cam_ife_csid_ver2_dump_irq_desc(
 				csid_reg->path_irq_desc[i].desc);
 				csid_reg->path_irq_desc[i].desc);
 		break;
 		break;
 	default:
 	default:
-		offset += scnprintf(inject_params->line_buf + offset,
+		scnprintf(inject_params->line_buf + offset,
 			LINE_BUFFER_LEN - offset,
 			LINE_BUFFER_LEN - offset,
 			"No matched reg unit for injection\n");
 			"No matched reg unit for injection\n");
 		return -EINVAL;
 		return -EINVAL;

+ 0 - 2
drivers/cam_isp/isp_hw_mgr/isp_hw/sfe_hw/cam_sfe_core.c

@@ -377,7 +377,6 @@ int cam_sfe_process_cmd(void *hw_priv, uint32_t cmd_type,
 	struct cam_hw_info                *sfe_hw = hw_priv;
 	struct cam_hw_info                *sfe_hw = hw_priv;
 	struct cam_hw_soc_info            *soc_info = NULL;
 	struct cam_hw_soc_info            *soc_info = NULL;
 	struct cam_sfe_hw_core_info       *core_info = NULL;
 	struct cam_sfe_hw_core_info       *core_info = NULL;
-	struct cam_sfe_hw_info            *hw_info = NULL;
 	int rc = 0;
 	int rc = 0;
 
 
 	if (!hw_priv) {
 	if (!hw_priv) {
@@ -387,7 +386,6 @@ int cam_sfe_process_cmd(void *hw_priv, uint32_t cmd_type,
 
 
 	soc_info = &sfe_hw->soc_info;
 	soc_info = &sfe_hw->soc_info;
 	core_info = (struct cam_sfe_hw_core_info *)sfe_hw->core_info;
 	core_info = (struct cam_sfe_hw_core_info *)sfe_hw->core_info;
-	hw_info = core_info->sfe_hw_info;
 
 
 	switch (cmd_type) {
 	switch (cmd_type) {
 	case CAM_ISP_HW_CMD_GET_CHANGE_BASE:
 	case CAM_ISP_HW_CMD_GET_CHANGE_BASE:

+ 0 - 2
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c

@@ -486,7 +486,6 @@ int cam_vfe_process_cmd(void *hw_priv, uint32_t cmd_type,
 	struct cam_hw_info                *vfe_hw = hw_priv;
 	struct cam_hw_info                *vfe_hw = hw_priv;
 	struct cam_hw_soc_info            *soc_info = NULL;
 	struct cam_hw_soc_info            *soc_info = NULL;
 	struct cam_vfe_hw_core_info       *core_info = NULL;
 	struct cam_vfe_hw_core_info       *core_info = NULL;
-	struct cam_vfe_hw_info            *hw_info = NULL;
 	int rc = 0;
 	int rc = 0;
 
 
 	if (!hw_priv) {
 	if (!hw_priv) {
@@ -496,7 +495,6 @@ int cam_vfe_process_cmd(void *hw_priv, uint32_t cmd_type,
 
 
 	soc_info = &vfe_hw->soc_info;
 	soc_info = &vfe_hw->soc_info;
 	core_info = (struct cam_vfe_hw_core_info *)vfe_hw->core_info;
 	core_info = (struct cam_vfe_hw_core_info *)vfe_hw->core_info;
-	hw_info = core_info->vfe_hw_info;
 
 
 	switch (cmd_type) {
 	switch (cmd_type) {
 	case CAM_ISP_HW_CMD_GET_CHANGE_BASE:
 	case CAM_ISP_HW_CMD_GET_CHANGE_BASE: