From: sashiko-bot@kernel.org
To: "Boris Brezillon" <boris.brezillon@collabora.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v3 05/17] drm/panthor: Flush the cleanup_wq in the unplug path
Date: Thu, 13 Aug 2026 11:18:15 +0000 [thread overview]
Message-ID: <20260813111815.8D6AB1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260813-panthor-unplug-fixes-v3-5-3ed4e961bbe7@collabora.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [Medium] Flushing a global, module-wide workqueue inside a device-specific unplug path stalls the unplug process for all active devices.
Pre-existing issues:
- [High] The patch adds `flush_workqueue(panthor_cleanup_wq)` to prevent Use-After-Free (UAF), but it does not prevent new work items from being queued after the flush completes, leaving a race window that still triggers UAFs.
--
--- Patch [5]: [PATCH v3 05/17] drm/panthor: Flush the cleanup_wq in the unplug path ---
commit ab033ca0df2b4b2d5ba70d4e669044aa6bb08bda
Author: Boris Brezillon <boris.brezillon@collabora.com>
drm/panthor: Flush the cleanup_wq in the unplug path
If we don't do that, we might face various UAFs, because the resource
referenced by these work items might be gone by the time they get
executed.
Closes: https://sashiko.dev/#/patchset/20260625-panthor-signal-from-irq-v5-0-8836a74e0ef9@collabora.com?part=2
> diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/panthor/panthor_mmu.c
> index 0182b72f19320..0b862d3c36058 100644
> --- a/drivers/gpu/drm/panthor/panthor_mmu.c
> +++ b/drivers/gpu/drm/panthor/panthor_mmu.c
> @@ -3365,6 +3365,12 @@ void panthor_mmu_unplug(struct panthor_device *ptdev)
> }
> }
> mutex_unlock(&ptdev->mmu->as.slots_lock);
> +
> + /* Ensure any pending job cleanup work are executed before returning,
> + * otherwise those might access objects that are gone if the work is
> + * executed after other components are unplugged.
> + */
> + flush_workqueue(panthor_cleanup_wq);
> }
[Severity: Medium]
Since panthor_cleanup_wq is allocated globally in panthor_drv_init() as a
module-wide workqueue, will flushing it here stall the teardown for all
active devices?
If the system has multiple Panthor GPUs and another device has a backlog of
jobs or a stuck work item, it seems this could block the current device's
unplug thread until all unrelated work items complete.
> diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c
> index 5832dccfc0932..f18b2e03f2fd8 100644
> --- a/drivers/gpu/drm/panthor/panthor_sched.c
> +++ b/drivers/gpu/drm/panthor/panthor_sched.c
[ ... ]
> @@ -4074,6 +4074,12 @@ void panthor_sched_unplug(struct panthor_device *ptdev)
> sched->pm.has_ref = false;
> }
> mutex_unlock(&sched->lock);
> +
> + /* Ensure any pending group release work are executed before returning,
> + * otherwise those might access objects that are gone if the work is
> + * executed after other components are unplugged.
> + */
> + flush_workqueue(panthor_cleanup_wq);
> }
[Severity: High]
This isn't a bug introduced by this patch, but does this flush actually
prevent the UAF if userspace still holds an open DRM file descriptor?
When userspace closes the file descriptor after the unplug completes, it
triggers the teardown path:
drm_file_free() -> panthor_postclose() -> panthor_group_pool_destroy()
This drops group references, calling group_release(), which will call:
queue_work(panthor_cleanup_wq, &group->release_work);
Once drm_file_free() completes, the last reference drops and drm_dev_release()
synchronously frees the panthor_device memory. Then group->release_work executes
asynchronously on the workqueue, accessing the freed group->ptdev and its
resources.
A similar race seems to exist in panthor_vm_bind_job_release() in
panthor_mmu.c, where dropped VM bind jobs queue cleanup_op_ctx_work after
the MMU flush. Can an unprivileged user trigger a GPU reset, wait for the
unplug, and then close the file descriptor to reliably hit this UAF?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260813-panthor-unplug-fixes-v3-0-3ed4e961bbe7@collabora.com?part=5
next prev parent reply other threads:[~2026-08-13 11:18 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-13 10:56 [PATCH v3 00/17] drm/panthor: Fix the unplug logic Boris Brezillon
2026-08-13 10:56 ` [PATCH v3 01/17] drm/panthor: Disable reset work before unplug Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 02/17] drm/panthor: Further delay reset work enablement Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 03/17] drm/panthor: Make sure reset requests in the resume path are not lost Boris Brezillon
2026-08-13 11:09 ` sashiko-bot
2026-08-13 10:57 ` [PATCH v3 04/17] drm/panthor: Make sure reset requests in the post reset " Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 05/17] drm/panthor: Flush the cleanup_wq in the unplug path Boris Brezillon
2026-08-13 11:18 ` sashiko-bot [this message]
2026-08-13 10:57 ` [PATCH v3 06/17] drm/panthor: Drop unused vm argument passed to panthor_vm_prepare_sync_only_op_ctx() Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 07/17] drm/panthor: Move the debugfs initialization to panthor_device.c Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 08/17] drm/panthor: Split panthor_vm Boris Brezillon
2026-08-13 11:37 ` sashiko-bot
2026-08-13 10:57 ` [PATCH v3 09/17] drm/panthor: Add fine-grained restrictions on VMs Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 10/17] drm/panthor: Check AS state before disabling Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 11/17] drm/panthor: Don't pre-allocate VMAs or page tables when preparing a full VM unmap Boris Brezillon
2026-08-13 11:12 ` sashiko-bot
2026-08-13 10:57 ` [PATCH v3 12/17] drm/panthor: Make the VM cleanup path more robust against UAF Boris Brezillon
2026-08-13 11:20 ` sashiko-bot
2026-08-13 10:57 ` [PATCH v3 13/17] drm/panthor: Track user owned VMs Boris Brezillon
2026-08-13 11:18 ` sashiko-bot
2026-08-13 10:57 ` [PATCH v3 14/17] drm/panthor: Track user owned groups Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 15/17] drm/panthor: Fix the unplug logic Boris Brezillon
2026-08-13 11:25 ` sashiko-bot
2026-08-13 10:57 ` [PATCH v3 16/17] drm/panthor: Add a debugfs knob to simulate unplug failures Boris Brezillon
2026-08-13 10:57 ` [PATCH v3 17/17] drm/panthor: Add a debugfs knobs to simulate reset failures Boris Brezillon
2026-08-13 11:23 ` [PATCH v3 00/17] drm/panthor: Fix the unplug logic Boris Brezillon
2026-08-13 15:11 ` Liviu Dudau
2026-08-13 15:55 ` Boris Brezillon
2026-08-13 17:06 ` Liviu Dudau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260813111815.8D6AB1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=boris.brezillon@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.