mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
media: vicodec: zero-initialize stateful decoder heap buffers
The stateful decoder leaks uninitialized kernel heap memory to userspace.
A process that can open the decoder video node gets it back in the CAPTURE
buffers it dequeues.
The reference frame and the compressed frame buffer are allocated with
kvmalloc() in vicodec_start_streaming(), and the decoder can read them
before they have been written. The first frame is allowed to be a P-frame,
in which case it is decoded against a reference frame that was never
produced, and the padding rows below the visible area are never written
for any frame.
Use kvzalloc() for both allocations.
Fixes: 256bf813ba ("media: vicodec: add the virtual codec driver")
Reported-by: Yuhao Jiang <danisjiang@gmail.com>
Assisted-by: Claude:claude-opus-5
Cc: stable@vger.kernel.org
Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
1adaefca71
commit
27953c0449
|
|
@ -1605,9 +1605,9 @@ static int vicodec_start_streaming(struct vb2_queue *q,
|
|||
}
|
||||
state->ref_stride = q_data->coded_width * info->luma_alpha_step;
|
||||
|
||||
state->ref_frame.buf = kvmalloc(total_planes_size, GFP_KERNEL);
|
||||
state->ref_frame.buf = kvzalloc(total_planes_size, GFP_KERNEL);
|
||||
state->ref_frame.luma = state->ref_frame.buf;
|
||||
new_comp_frame = kvmalloc(ctx->comp_max_size, GFP_KERNEL);
|
||||
new_comp_frame = kvzalloc(ctx->comp_max_size, GFP_KERNEL);
|
||||
|
||||
if (!state->ref_frame.luma || !new_comp_frame) {
|
||||
kvfree(state->ref_frame.luma);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user