media: amphion: fix CHECKED_RETURN issues reported by coverity
authorMing Qian <ming.qian@nxp.com>
Tue, 18 Jul 2023 09:50:09 +0000 (17:50 +0800)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 25 Jul 2023 07:31:49 +0000 (09:31 +0200)
calling "vpu_cmd_send/vpu_get_buffer_state/vpu_session_alloc_fs"
without checking return value

Fixes: 9f599f351e86 ("media: amphion: add vpu core driver")
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/platform/amphion/vdec.c
drivers/media/platform/amphion/vpu_cmds.c
drivers/media/platform/amphion/vpu_dbg.c

index eeb2ef72df5b374842b1e12818d06bbc6cf0a9b5..133d77d1ea0c30ac389fa402826b4c6470ff8e5b 100644 (file)
@@ -1019,6 +1019,7 @@ static int vdec_response_frame_abnormal(struct vpu_inst *inst)
 {
        struct vdec_t *vdec = inst->priv;
        struct vpu_fs_info info;
+       int ret;
 
        if (!vdec->req_frame_count)
                return 0;
@@ -1026,7 +1027,9 @@ static int vdec_response_frame_abnormal(struct vpu_inst *inst)
        memset(&info, 0, sizeof(info));
        info.type = MEM_RES_FRAME;
        info.tag = vdec->seq_tag + 0xf0;
-       vpu_session_alloc_fs(inst, &info);
+       ret = vpu_session_alloc_fs(inst, &info);
+       if (ret)
+               return ret;
        vdec->req_frame_count--;
 
        return 0;
index bc4e732cdd9d3e9b78f056157e2a990885093eee..ef8c0eaaf66af424c90a6a46fb61401161108fc7 100644 (file)
@@ -304,7 +304,8 @@ static void vpu_core_keep_active(struct vpu_core *core)
 
        dev_dbg(core->dev, "try to wake up\n");
        mutex_lock(&core->cmd_lock);
-       vpu_cmd_send(core, &pkt);
+       if (vpu_cmd_send(core, &pkt))
+               dev_err(core->dev, "fail to keep active\n");
        mutex_unlock(&core->cmd_lock);
 }
 
index adc523b950618966776adf0afb4ceb961389d7a2..982c2c777484c27642cb401d788164209af76525 100644 (file)
@@ -50,6 +50,13 @@ static char *vpu_stat_name[] = {
        [VPU_BUF_STATE_ERROR] = "error",
 };
 
+static inline const char *to_vpu_stat_name(int state)
+{
+       if (state <= VPU_BUF_STATE_ERROR)
+               return vpu_stat_name[state];
+       return "unknown";
+}
+
 static int vpu_dbg_instance(struct seq_file *s, void *data)
 {
        struct vpu_inst *inst = s->private;
@@ -141,7 +148,7 @@ static int vpu_dbg_instance(struct seq_file *s, void *data)
                num = scnprintf(str, sizeof(str),
                                "output [%2d] state = %10s, %8s\n",
                                i, vb2_stat_name[vb->state],
-                               vpu_stat_name[vpu_get_buffer_state(vbuf)]);
+                               to_vpu_stat_name(vpu_get_buffer_state(vbuf)));
                if (seq_write(s, str, num))
                        return 0;
        }
@@ -156,7 +163,7 @@ static int vpu_dbg_instance(struct seq_file *s, void *data)
                num = scnprintf(str, sizeof(str),
                                "capture[%2d] state = %10s, %8s\n",
                                i, vb2_stat_name[vb->state],
-                               vpu_stat_name[vpu_get_buffer_state(vbuf)]);
+                               to_vpu_stat_name(vpu_get_buffer_state(vbuf)));
                if (seq_write(s, str, num))
                        return 0;
        }