On Thu Apr 2 13:45:53 2026 -0500, Brandon Brnich wrote:
> Possible use after free if IRQ thread manages to obtain spinlock between
> m2m_ctx release and wave5_release function removing stream instance from
> list of active instances. The IRQ thread looks for the m2m_ctx which is
> freed so null pointer dereference occurs.
> 
> Signed-off-by: Brandon Brnich <[email protected]>
> Reviewed-by: Nicolas Dufresne <[email protected]>
> Tested-by: Jackson Lee <[email protected]>
> Signed-off-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/chips-media/wave5/wave5-helper.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/chips-media/wave5/wave5-helper.c 
b/drivers/media/platform/chips-media/wave5/wave5-helper.c
index 53a0ac068c2e..c3d34be833ff 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-helper.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-helper.c
@@ -68,7 +68,6 @@ int wave5_vpu_release_device(struct file *filp,
        int ret = 0;
        unsigned long flags;
 
-       v4l2_m2m_ctx_release(inst->v4l2_fh.m2m_ctx);
        /*
         * To prevent Null reference exception, the existing irq handler were
         * separated to two modules.
@@ -89,6 +88,9 @@ int wave5_vpu_release_device(struct file *filp,
        list_del_init(&inst->list);
        spin_unlock_irqrestore(&inst->dev->irq_spinlock, flags);
        mutex_unlock(&inst->dev->irq_lock);
+
+       v4l2_m2m_ctx_release(inst->v4l2_fh.m2m_ctx);
+
        if (inst->state != VPU_INST_STATE_NONE) {
                u32 fail_res;
 
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to