]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: cedrus: skip invalid H.264 reference list entries
authorPengpeng Hou <pengpeng@iscas.ac.cn>
Tue, 24 Mar 2026 08:08:56 +0000 (16:08 +0800)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Mon, 4 May 2026 06:35:14 +0000 (08:35 +0200)
Cedrus consumes H.264 ref_pic_list0/ref_pic_list1 entries from the
stateless slice control and later uses their indices to look up
decode->dpb[] in _cedrus_write_ref_list().

Rejecting such controls in cedrus_try_ctrl() would break existing
userspace, since stateless H.264 reference lists may legitimately carry
out-of-range indices for missing references. Instead, guard the actual
DPB lookup in Cedrus and skip entries whose indices do not fit the fixed
V4L2_H264_NUM_DPB_ENTRIES array.

This keeps the fix local to the driver use site and avoids out-of-bounds
reads from malformed or unsupported reference list entries.

Fixes: e000e1fa4bdbd ("media: uapi: h264: Update reference lists")
Cc: stable@vger.kernel.org
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Tested-by: Chen-Yu Tsai <wens@kernel.org>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/staging/media/sunxi/cedrus/cedrus_h264.c

index 3e2843ef6ccec8f77173137764ca9eca2b392081..fc54d993b11f2a5305940ea06762632641ea3506 100644 (file)
@@ -210,6 +210,9 @@ static void _cedrus_write_ref_list(struct cedrus_ctx *ctx,
                u8 dpb_idx;
 
                dpb_idx = ref_list[i].index;
+               if (dpb_idx >= V4L2_H264_NUM_DPB_ENTRIES)
+                       continue;
+
                dpb = &decode->dpb[dpb_idx];
 
                if (!(dpb->flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE))