Commit a9f7224c authored by Ming Qian's avatar Ming Qian Committed by Mauro Carvalho Chehab
Browse files

media: amphion: fix some issues to improve robust



fix some issues reported by Dan,
1. fix some signedness bug
2. don't use u32 as function return value
3. prevent a divide by zero bug
4. Just return zero on success, don't return a known parameter
5. check the validity of some variables
6. reset buffer state when return buffers
7. make sure the ALIGN won't wrap to zero

Signed-off-by: default avatarMing Qian <ming.qian@nxp.com>
Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 05a03eff
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -472,7 +472,7 @@ struct vpu_inst *vpu_core_find_instance(struct vpu_core *core, u32 index)
	struct vpu_inst *tmp;

	mutex_lock(&core->lock);
	if (!test_bit(index, &core->instance_mask))
	if (index >= core->supported_instance_count || !test_bit(index, &core->instance_mask))
		goto exit;
	list_for_each_entry(tmp, &core->instances, list) {
		if (tmp->id == index) {
+7 −6
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ u32 vpu_helper_get_plane_size(u32 fmt, u32 w, u32 h, int plane_no,
	}
}

u32 vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer,
int vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer,
				       u32 *rptr, u32 size, void *dst)
{
	u32 offset;
@@ -227,10 +227,11 @@ u32 vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer,
	}

	*rptr = vpu_helper_step_walk(stream_buffer, offset, size);
	return size;

	return 0;
}

u32 vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer,
int vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer,
				     u32 *wptr, u32 size, void *src)
{
	u32 offset;
@@ -260,10 +261,10 @@ u32 vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer,

	*wptr = vpu_helper_step_walk(stream_buffer, offset, size);

	return size;
	return 0;
}

u32 vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer,
int vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer,
				    u32 *wptr, u8 val, u32 size)
{
	u32 offset;
@@ -297,7 +298,7 @@ u32 vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer,

	*wptr = offset;

	return size;
	return 0;
}

u32 vpu_helper_get_free_space(struct vpu_inst *inst)
+3 −3
Original line number Diff line number Diff line
@@ -19,11 +19,11 @@ u32 vpu_helper_valid_frame_width(struct vpu_inst *inst, u32 width);
u32 vpu_helper_valid_frame_height(struct vpu_inst *inst, u32 height);
u32 vpu_helper_get_plane_size(u32 fmt, u32 width, u32 height, int plane_no,
			      u32 stride, u32 interlaced, u32 *pbl);
u32 vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer,
int vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer,
				       u32 *rptr, u32 size, void *dst);
u32 vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer,
int vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer,
				     u32 *wptr, u32 size, void *src);
u32 vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer,
int vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer,
				    u32 *wptr, u8 val, u32 size);
u32 vpu_helper_get_free_space(struct vpu_inst *inst);
u32 vpu_helper_get_used_space(struct vpu_inst *inst);
+1 −1
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ int vpu_imx8q_on_firmware_loaded(struct vpu_core *core)
	return 0;
}

u32 vpu_imx8q_check_memory_region(dma_addr_t base, dma_addr_t addr, u32 size)
int vpu_imx8q_check_memory_region(dma_addr_t base, dma_addr_t addr, u32 size)
{
	const struct vpu_rpc_region_t imx8q_regions[] = {
		{0x00000000, 0x08000000, VPU_CORE_MEMORY_CACHED},
+1 −1
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ int vpu_imx8q_set_system_cfg_common(struct vpu_rpc_system_config *config, u32 re
int vpu_imx8q_boot_core(struct vpu_core *core);
int vpu_imx8q_get_power_state(struct vpu_core *core);
int vpu_imx8q_on_firmware_loaded(struct vpu_core *core);
u32 vpu_imx8q_check_memory_region(dma_addr_t base, dma_addr_t addr, u32 size);
int vpu_imx8q_check_memory_region(dma_addr_t base, dma_addr_t addr, u32 size);
bool vpu_imx8q_check_codec(enum vpu_core_type type);
bool vpu_imx8q_check_fmt(enum vpu_core_type type, u32 pixelfmt);

Loading