diff options
| -rw-r--r-- | drivers/char/diag/diag_dci.c | 4 | ||||
| -rw-r--r-- | drivers/char/diag/diag_masks.c | 2 | ||||
| -rw-r--r-- | drivers/media/platform/msm/ais/common/cam_soc_api.c | 7 | ||||
| -rw-r--r-- | drivers/media/platform/msm/ais/sensor/cci/msm_early_cam.c | 28 |
4 files changed, 37 insertions, 4 deletions
diff --git a/drivers/char/diag/diag_dci.c b/drivers/char/diag/diag_dci.c index f2eb9b285c67..e043b08a3467 100644 --- a/drivers/char/diag/diag_dci.c +++ b/drivers/char/diag/diag_dci.c @@ -1939,7 +1939,9 @@ static int diag_process_dci_pkt_rsp(unsigned char *buf, int len) if (!buf) return -EIO; - if (len <= sizeof(struct dci_pkt_req_t) || len > DCI_REQ_BUF_SIZE) { + if (len <= (sizeof(struct dci_pkt_req_t) + + sizeof(struct diag_pkt_header_t)) || + len > DCI_REQ_BUF_SIZE) { pr_err("diag: dci: Invalid length %d len in %s", len, __func__); return -EIO; } diff --git a/drivers/char/diag/diag_masks.c b/drivers/char/diag/diag_masks.c index a460ce771249..04d827de8570 100644 --- a/drivers/char/diag/diag_masks.c +++ b/drivers/char/diag/diag_masks.c @@ -706,7 +706,7 @@ static int diag_cmd_get_msg_mask(unsigned char *src_buf, int src_len, mask_info = (!info) ? &msg_mask : info->msg_mask; if (!src_buf || !dest_buf || src_len <= 0 || dest_len <= 0 || - !mask_info) { + !mask_info || (src_len < sizeof(struct diag_build_mask_req_t))) { pr_err("diag: Invalid input in %s, src_buf: %pK, src_len: %d, dest_buf: %pK, dest_len: %d, mask_info: %pK\n", __func__, src_buf, src_len, dest_buf, dest_len, mask_info); diff --git a/drivers/media/platform/msm/ais/common/cam_soc_api.c b/drivers/media/platform/msm/ais/common/cam_soc_api.c index 0ab803da54fc..6c0e188adb75 100644 --- a/drivers/media/platform/msm/ais/common/cam_soc_api.c +++ b/drivers/media/platform/msm/ais/common/cam_soc_api.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -58,18 +58,21 @@ static int msm_camera_get_clk_info_internal(struct device *dev, cnt = of_property_count_strings(of_node, "clock-names"); if (cnt <= 0) { pr_err("err: No clocks found in DT=%zu\n", cnt); + *clk_info = NULL; return -EINVAL; } tmp = of_property_count_u32_elems(of_node, "qcom,clock-rates"); if (tmp <= 0) { pr_err("err: No clk rates device tree, count=%zu", tmp); + *clk_info = NULL; return -EINVAL; } if (cnt != tmp) { pr_err("err: clk name/rates mismatch, strings=%zu, rates=%zu\n", cnt, tmp); + *clk_info = NULL; return -EINVAL; } @@ -79,11 +82,13 @@ static int msm_camera_get_clk_info_internal(struct device *dev, if (tmp <= 0) { pr_err("err: control strings not found in DT count=%zu", tmp); + *clk_info = NULL; return -EINVAL; } if (cnt != tmp) { pr_err("err: controls mismatch, strings=%zu, ctl=%zu\n", cnt, tmp); + *clk_info = NULL; return -EINVAL; } clock_cntl_support = true; diff --git a/drivers/media/platform/msm/ais/sensor/cci/msm_early_cam.c b/drivers/media/platform/msm/ais/sensor/cci/msm_early_cam.c index 7329dd9ddb27..9a06531f7b04 100644 --- a/drivers/media/platform/msm/ais/sensor/cci/msm_early_cam.c +++ b/drivers/media/platform/msm/ais/sensor/cci/msm_early_cam.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -164,6 +164,19 @@ int msm_ais_enable_clocks(void) return rc; } + if ((new_early_cam_dev->pdev == NULL) || + (new_early_cam_dev->early_cam_clk_info == NULL) || + (new_early_cam_dev->early_cam_clk == NULL) || + (new_early_cam_dev->num_clk == 0)) { + rc = -EINVAL; + pr_err("%s: Clock details uninitialised %d %pK %pK %pK %zd\n", + __func__, rc, new_early_cam_dev->pdev, + new_early_cam_dev->early_cam_clk_info, + new_early_cam_dev->early_cam_clk, + new_early_cam_dev->num_clk); + return rc; + } + rc = msm_camera_clk_enable(&new_early_cam_dev->pdev->dev, new_early_cam_dev->early_cam_clk_info, new_early_cam_dev->early_cam_clk, @@ -366,6 +379,19 @@ static int msm_early_cam_probe(struct platform_device *pdev) pr_err("%s:%d early_cam enable_vreg failed\n", __func__, __LINE__); + if ((new_early_cam_dev->pdev == NULL) || + (new_early_cam_dev->early_cam_clk_info == NULL) || + (new_early_cam_dev->early_cam_clk == NULL) || + (new_early_cam_dev->num_clk == 0)) { + rc = -EINVAL; + pr_err("%s: Clock details uninitialised %d %pK %pK %pK %zd\n", + __func__, rc, new_early_cam_dev->pdev, + new_early_cam_dev->early_cam_clk_info, + new_early_cam_dev->early_cam_clk, + new_early_cam_dev->num_clk); + return rc; + } + rc = msm_camera_clk_enable(&new_early_cam_dev->pdev->dev, new_early_cam_dev->early_cam_clk_info, new_early_cam_dev->early_cam_clk, |
