Commit c6b688d7 authored by Fei Shao's avatar Fei Shao Committed by Zheng Yejian
Browse files

media: mediatek: vcodec: Only free buffer VA that is not NULL

mainline inclusion
from mainline-v6.10-rc1
commit eb005c801ec70ff4307727bd3bd6e8280169ef32
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAH97R
CVE: CVE-2023-52888

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=eb005c801ec70ff4307727bd3bd6e8280169ef32



-------------------------------------------

In the MediaTek vcodec driver, while mtk_vcodec_mem_free() is mostly
called only when the buffer to free exists, there are some instances
that didn't do the check and triggered warnings in practice.

We believe those checks were forgotten unintentionally. Add the checks
back to fix the warnings.

Fixes: 2cc93862 ("[media] vcodec: mediatek: Add Mediatek H264 Video Encoder Driver")
Conflicts:
	drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
	drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c
	drivers/media/platform/mtk-vcodec/venc/venc_h264_if.c
[Resolve conflicts due to lack of several refactor codes]
Signed-off-by: default avatarFei Shao <fshao@chromium.org>
Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzej.p@collabora.com>
Signed-off-by: default avatarSebastian Fricke <sebastian.fricke@collabora.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: default avatarZheng Yejian <zhengyejian1@huawei.com>
parent e81a12ab
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -231,10 +231,11 @@ static void h264_enc_free_work_buf(struct venc_h264_inst *inst)
	 * other buffers need to be freed by AP.
	 */
	for (i = 0; i < VENC_H264_VPU_WORK_BUF_MAX; i++) {
		if (i != VENC_H264_VPU_WORK_BUF_SKIP_FRAME)
		if (i != VENC_H264_VPU_WORK_BUF_SKIP_FRAME && inst->work_bufs[i].va)
			mtk_vcodec_mem_free(inst->ctx, &inst->work_bufs[i]);
	}

	if (inst->pps_buf.va)
		mtk_vcodec_mem_free(inst->ctx, &inst->pps_buf);

	mtk_vcodec_debug_leave(inst);