media: amphion: fix some issues reported by coverity
Subsystems (2)
Ming Qian
maintainerv2 cover media: amphion: fix some issues reported by coverity
Coverity is a proprietary static code analysis tool from Synopsys. And the coverity scan report some issues about amphion vpu driver,
CHECKED_RETURN: 4 caseREVERSE_INULL: 2 case
UNINIT: 6 caseUNUSED_VALUE: 1 case
Ming Qian (5):
media: amphion: fix CHECKED_RETURN issues reported by coverity
media: amphion: fix REVERSE_INULL issues reported by coverity
media: amphion: fix UNINIT issues reported by coverity
media: amphion: fix UNUSED_VALUE issue reported by coverity
media: amphion: ensure the bitops don't cross boundaries
drivers/media/platform/amphion/vdec.c | 5 ++++- drivers/media/platform/amphion/venc.c | 6 ++++-- drivers/media/platform/amphion/vpu_cmds.c | 5 +++-- drivers/media/platform/amphion/vpu_core.c | 2 ++ drivers/media/platform/amphion/vpu_dbg.c | 11 +++++++++-- drivers/media/platform/amphion/vpu_msgs.c | 12 ++++++------ 6 files changed, 28 insertions(+), 13 deletions(-)
Signature · 1 line
2.38.1
Ming Qian
maintainerPATCH v2 1/5 media: amphion: fix CHECKED_RETURN issues reported by coverity
calling "vpu_cmd_send/vpu_get_buffer_state/vpu_session_alloc_fs" without checking return value
--- drivers/media/platform/amphion/vdec.c | 5 ++++- drivers/media/platform/amphion/vpu_cmds.c | 3 ++- drivers/media/platform/amphion/vpu_dbg.c | 11 +++++++++-- 3 files changed, 15 insertions(+), 4 deletions(-)
drivers/media/platform/amphion/vdec.c +4 -1
@@ -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 ;
drivers/media/platform/amphion/vpu_cmds.c +2 -1
@@ -306,7 +306,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); }
drivers/media/platform/amphion/vpu_dbg.c +9 -2
@@ -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 ; }
Signature · 1 line
2.38.1
Ming Qian
maintainerPATCH v2 2/5 media: amphion: fix REVERSE_INULL issues reported by coverity
In reply to Ming Qiannull-checking of a pointor is suggested before dereferencing it
--- drivers/media/platform/amphion/venc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/media/platform/amphion/venc.c +4 -2
@@ -268,7 +268,7 @@ static int venc_g_parm(struct file *file, void *fh, struct v4l2_streamparm *parm {struct vpu_inst *inst =to_inst (file);struct venc_t *venc = inst->priv; -struct v4l2_fract *timeperframe = &parm->parm.capture.timeperframe; +struct v4l2_fract *timeperframe;if (!parm)return -EINVAL ;
@@ -279,6 +279,7 @@ static int venc_g_parm(struct file *file, void *fh, struct v4l2_streamparm *parmif (!vpu_helper_check_type (inst, parm->type))return -EINVAL ; + timeperframe = &parm->parm.capture.timeperframe; parm->parm.capture.capability =V4L2_CAP_TIMEPERFRAME ; parm->parm.capture.readbuffers =0 ; timeperframe->numerator = venc->params.frame_rate.numerator;
@@ -291,7 +292,7 @@ static int venc_s_parm(struct file *file, void *fh, struct v4l2_streamparm *parm {struct vpu_inst *inst =to_inst (file);struct venc_t *venc = inst->priv; -struct v4l2_fract *timeperframe = &parm->parm.capture.timeperframe; +struct v4l2_fract *timeperframe;unsigned long n, d;if (!parm)
@@ -303,6 +304,7 @@ static int venc_s_parm(struct file *file, void *fh, struct v4l2_streamparm *parmif (!vpu_helper_check_type (inst, parm->type))return -EINVAL ; + timeperframe = &parm->parm.capture.timeperframe;if (!timeperframe->numerator) timeperframe->numerator = venc->params.frame_rate.numerator;if (!timeperframe->denominator)
Signature · 1 line
2.38.1
Ming Qian
maintainerPATCH v2 3/5 media: amphion: fix UNINIT issues reported by coverity
In reply to Ming Qianusing uninitialized value may introduce risk
--- drivers/media/platform/amphion/vpu_msgs.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/media/platform/amphion/vpu_msgs.c +6 -6
@@ -32,7 +32,7 @@ static void vpu_session_handle_start_done(struct vpu_inst *inst, struct vpu_rpc_static void vpu_session_handle_mem_request (struct vpu_inst *inst,struct vpu_rpc_event *pkt) { -struct vpu_pkt_mem_req_data req_data; +struct vpu_pkt_mem_req_data req_data = {0 };vpu_iface_unpack_msg_data (inst->core, pkt, (void *)&req_data); vpu_trace(inst->dev, "[%d] %d:%d %d:%d %d:%d\n",
@@ -80,7 +80,7 @@ static void vpu_session_handle_resolution_change(struct vpu_inst *inst, struct vstatic void vpu_session_handle_enc_frame_done (struct vpu_inst *inst,struct vpu_rpc_event *pkt) { -struct vpu_enc_pic_info info; +struct vpu_enc_pic_info info = {0 };vpu_iface_unpack_msg_data (inst->core, pkt, (void *)&info); dev_dbg(inst->dev, "[%d] frame id = %d, wptr = 0x%x, size = %d\n",
@@ -90,7 +90,7 @@ static void vpu_session_handle_enc_frame_done(struct vpu_inst *inst, struct vpu_static void vpu_session_handle_frame_request (struct vpu_inst *inst,struct vpu_rpc_event *pkt) { -struct vpu_fs_info fs; +struct vpu_fs_info fs = {0 };vpu_iface_unpack_msg_data (inst->core, pkt, &fs);call_void_vop (inst, event_notify,VPU_MSG_ID_FRAME_REQ , &fs);
@@ -107,7 +107,7 @@ static void vpu_session_handle_frame_release(struct vpu_inst *inst, struct vpu_r info.type = inst->out_format.type;call_void_vop (inst, buf_done, &info); }else if (inst->core->type ==VPU_CORE_TYPE_DEC ) { -struct vpu_fs_info fs; +struct vpu_fs_info fs = {0 };vpu_iface_unpack_msg_data (inst->core, pkt, &fs);call_void_vop (inst, event_notify,VPU_MSG_ID_FRAME_RELEASE , &fs);
@@ -122,7 +122,7 @@ static void vpu_session_handle_input_done(struct vpu_inst *inst, struct vpu_rpc_static void vpu_session_handle_pic_decoded (struct vpu_inst *inst,struct vpu_rpc_event *pkt) { -struct vpu_dec_pic_info info; +struct vpu_dec_pic_info info = {0 };vpu_iface_unpack_msg_data (inst->core, pkt, (void *)&info);call_void_vop (inst, get_one_frame, &info);
@@ -130,7 +130,7 @@ static void vpu_session_handle_pic_decoded(struct vpu_inst *inst, struct vpu_rpcstatic void vpu_session_handle_pic_done (struct vpu_inst *inst,struct vpu_rpc_event *pkt) { -struct vpu_dec_pic_info info; +struct vpu_dec_pic_info info = {0 };struct vpu_frame_info frame;memset (&frame,0 ,sizeof (frame));
Signature · 1 line
2.38.1
Ming Qian
maintainerPATCH v2 4/5 media: amphion: fix UNUSED_VALUE issue reported by coverity
In reply to Ming Qianassign value '-EINVAL' to ret, but the stored value is overwritten before it can be used
--- drivers/media/platform/amphion/vpu_cmds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/platform/amphion/vpu_cmds.c +1 -1
@@ -315,7 +315,7 @@ static int vpu_session_send_cmd(struct vpu_inst *inst, u32 id, void *data) {unsigned long key;int sync = false; -int ret = -EINVAL ; +int ret;if (inst->id <0 )return -EINVAL ;
Signature · 1 line
2.38.1
Ming Qian
maintainerPATCH v2 5/5 media: amphion: ensure the bitops don't cross boundaries
In reply to Ming Qianthe supported_instance_count determine the instance index range, it shouldn't exceed the bits number of instance_mask, otherwise the bitops of instance_mask may cross boundaries
--- drivers/media/platform/amphion/vpu_core.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/platform/amphion/vpu_core.c +2 -0
@@ -88,6 +88,8 @@ static int vpu_core_boot_done(struct vpu_core *core) core->supported_instance_count =min (core->supported_instance_count, count); } +if (core->supported_instance_count >=BITS_PER_TYPE (core->instance_mask)) + core->supported_instance_count =BITS_PER_TYPE (core->instance_mask); core->fw_version = fw_version;vpu_core_set_state (core,VPU_CORE_ACTIVE );
Signature · 1 line
2.38.1