mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-20 21:24:51 -04:00
media: iris: Add buffer to list only after successful allocation
Move `list_add_tail()` to after `dma_alloc_attrs()` succeeds when creating
internal buffers. Previously, the buffer was enqueued in `buffers->list`
before the DMA allocation. If the allocation failed, the function returned
`-ENOMEM` while leaving a partially initialized buffer in the list, which
could lead to inconsistent state and potential leaks.
By adding the buffer to the list only after `dma_alloc_attrs()` succeeds,
we ensure the list contains only valid, fully initialized buffers.
Fixes: 73702f45db ("media: iris: allocate, initialize and queue internal buffers")
Reviewed-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Reviewed-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
committed by
Hans Verkuil
parent
bbef55f414
commit
2d0bbd982d
@@ -351,12 +351,15 @@ static int iris_create_internal_buffer(struct iris_inst *inst,
|
||||
buffer->index = index;
|
||||
buffer->buffer_size = buffers->size;
|
||||
buffer->dma_attrs = DMA_ATTR_WRITE_COMBINE | DMA_ATTR_NO_KERNEL_MAPPING;
|
||||
list_add_tail(&buffer->list, &buffers->list);
|
||||
|
||||
buffer->kvaddr = dma_alloc_attrs(core->dev, buffer->buffer_size,
|
||||
&buffer->device_addr, GFP_KERNEL, buffer->dma_attrs);
|
||||
if (!buffer->kvaddr)
|
||||
if (!buffer->kvaddr) {
|
||||
kfree(buffer);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
list_add_tail(&buffer->list, &buffers->list);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user