From db710e3ab8b6aca3bd589c7d2d4c45b2bc2b9ef3 Mon Sep 17 00:00:00 2001 From: Shijie Qin Date: Fri, 23 Aug 2019 15:27:21 +0800 Subject: [PATCH] MLK-22464 VPU Decoder: [MX8QM] vpu issue in coverity kernel scan 1. CID 6371811: Dereference before null check (REVERSE_INULL) 2. CID 6371006: Unchecked return value (CHECKED_RETURN) Signed-off-by: Shijie Qin Reviewed-by: ming_qian --- drivers/mxc/vpu_malone/vpu_b0.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/drivers/mxc/vpu_malone/vpu_b0.c b/drivers/mxc/vpu_malone/vpu_b0.c index 4c9afee6be3e..12f5a8b2b9dd 100644 --- a/drivers/mxc/vpu_malone/vpu_b0.c +++ b/drivers/mxc/vpu_malone/vpu_b0.c @@ -895,10 +895,18 @@ void check_fuse_value(struct vpu_dev *dev, u_int32 fuse; u_int32 val; u_int32 i; + sc_err_t ret; if (!dev) return; - sc_misc_otp_fuse_read(dev->mu_ipcHandle, VPU_DISABLE_BITS, &fuse); + + ret = sc_misc_otp_fuse_read(dev->mu_ipcHandle, VPU_DISABLE_BITS, &fuse); + if (ret) { + vpu_dbg(LVL_WARN, "warning: %s() read value fail: %d\n", + __func__, ret); + return; + } + val = (fuse >> 2) & 0x3UL; if (val == 0x1UL) { for (i = 0; i < table_size; i++) @@ -4944,7 +4952,7 @@ static int vpu_firmware_download(struct vpu_dev *This) This->generic_dev ); - if (ret) { + if (ret || !This->m0_pfw) { vpu_err("error: %s() request fw %s failed(%d)\n", __func__, M0FW_FILENAME, ret); @@ -4952,14 +4960,15 @@ static int vpu_firmware_download(struct vpu_dev *This) release_firmware(This->m0_pfw); This->m0_pfw = NULL; } + return ret; - } else { - vpu_dbg(LVL_INFO, "%s() request fw %s got size(%d)\n", - __func__, M0FW_FILENAME, (int)This->m0_pfw->size); - image = (uint8_t *)This->m0_pfw->data; - FW_Size = This->m0_pfw->size; } + vpu_dbg(LVL_INFO, "%s() request fw %s got size(%d)\n", + __func__, M0FW_FILENAME, (int)This->m0_pfw->size); + image = (uint8_t *)This->m0_pfw->data; + FW_Size = This->m0_pfw->size; + cleanup_firmware_memory(This); memcpy(This->m0_p_fw_space_vir, image, FW_Size); @@ -4968,10 +4977,8 @@ static int vpu_firmware_download(struct vpu_dev *This) enable_csr_reg(This); This->need_cleanup_firmware = true; - if (This->m0_pfw) { - release_firmware(This->m0_pfw); - This->m0_pfw = NULL; - } + release_firmware(This->m0_pfw); + This->m0_pfw = NULL; return ret; } -- 2.17.1