From: sashiko-bot@kernel.org
To: "Tejas Upadhyay" <tejas.upadhyay@intel.com>
Cc: intel-xe@lists.freedesktop.org
Subject: Re: [PATCH V19 02/15] drm/xe: Link LRC BO and its execution Queue
Date: Mon, 31 Aug 2026 07:24:09 +0000 [thread overview]
Message-ID: <20260831072409.994EB1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260831064942.315720-19-tejas.upadhyay@intel.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Flawed synchronization design between LRC BO queue back-pointer reader and queue teardown, potentially leading to use-after-free of queue internals and queue memory.
--
commit 533bbdfdba916103ef324691d9fb513031965dd4
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe: Link LRC BO and its execution Queue
To establish a link between an LRC BO and its corresponding execution
Queue, a back-pointer is stored within the BO's private data structure.
This allows the driver to identify and take corrective action on the
specific queue if the LRC BO encounters an error.
[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index c4213bb9c137f..91ed6c0fac84e 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -387,6 +387,12 @@ static int __xe_exec_queue_init(struct xe_exec_queue *q, u32 exec_queue_flags)
> goto err_lrc;
> }
>
> + /*
> + * The queue ref counts the LRCs, thus it safe for the LRC BO to hold a
> + * pointer to queue without reference. The reader holds dma_resv (
> + * xe_bo_lock) which serializes with xe_lrc_finish().
> + */
> + WRITE_ONCE(lrc->bo->q, xe_exec_queue_multi_queue_primary(q));
[Severity: High]
Does this code introduce a flawed synchronization design between the LRC BO
queue back-pointer reader and queue teardown, potentially leading to a
use-after-free of queue internals and queue memory?
If a multi-LRC queue creation succeeds for the first LRC (i=0) but fails for a
subsequent one, the error path calls __xe_exec_queue_fini(q) while the queue's
refcount is still 1.
__xe_exec_queue_fini(q) destroys backend structures before dropping LRC
references (which would clear bo->q via xe_lrc_finish()):
drivers/gpu/drm/xe/xe_exec_queue.c:__xe_exec_queue_fini() {
...
q->ops->fini(q);
for (i = 0; i < q->width; ++i)
xe_lrc_put(q->lrc[i]);
...
}
Because the backend structures are destroyed before the back-pointer is cleared,
there is a window where bo->q points to a partially destroyed queue.
Concurrently, if a VRAM page offline or memory shrinker (in xe_ttm_vram_mgr.c)
locks the first LRC's BO, reads bo->q, and successfully takes a reference
(xe_exec_queue_get_unless_zero(q) succeeds because refcount=1), the reader
could then call xe_exec_queue_kill(q). This would access already-freed
backend structures (e.g., q->guc->sched).
Additionally, looking at the error path for xe_exec_queue_create(), the code
forcefully frees the queue memory without checking if a concurrent reader via
bo->q has elevated the refcount:
drivers/gpu/drm/xe/xe_exec_queue.c:xe_exec_queue_create() {
...
err_post_init:
__xe_exec_queue_fini(q);
err_post_alloc:
__xe_exec_queue_free(q);
return ERR_PTR(err);
}
Can this lead to a use-after-free of the queue memory itself when the
concurrent reader later uses or puts the queue?
> xe_exec_queue_set_lrc(q, lrc, i);
>
> if (__lrc)
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=2
next prev parent reply other threads:[~2026-08-31 7:24 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 01/15] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 02/15] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
2026-08-31 7:24 ` sashiko-bot [this message]
2026-08-31 6:49 ` [PATCH V19 03/15] drm/xe: Export xe_ttm_bo_purge() Tejas Upadhyay
2026-09-02 0:33 ` Matthew Brost
2026-08-31 6:49 ` [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages Tejas Upadhyay
2026-08-31 6:52 ` Ghimiray, Himal Prasad
2026-08-31 7:42 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 05/15] drm/xe/bo: Make xe_bo_is_user() public Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
2026-08-31 6:53 ` Ghimiray, Himal Prasad
2026-08-31 8:03 ` sashiko-bot
2026-09-01 5:05 ` Upadhyay, Tejas
2026-08-31 6:49 ` [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free helpers Tejas Upadhyay
2026-08-31 8:08 ` sashiko-bot
2026-09-01 5:10 ` Upadhyay, Tejas
2026-08-31 6:49 ` [PATCH V19 08/15] drm/xe/vram: Add page offline data structures and lifecycle Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
2026-08-31 6:57 ` Ghimiray, Himal Prasad
2026-08-31 8:37 ` sashiko-bot
2026-09-01 5:48 ` Upadhyay, Tejas
2026-08-31 6:49 ` [PATCH V19 10/15] drm/xe/configfs: Add disable_vram_page_offline attribute Tejas Upadhyay
2026-08-31 8:45 ` sashiko-bot
2026-09-01 5:25 ` Upadhyay, Tejas
2026-08-31 6:49 ` [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline policy at init Tejas Upadhyay
2026-08-31 9:02 ` sashiko-bot
2026-09-01 5:22 ` Upadhyay, Tejas
2026-08-31 6:49 ` [PATCH V19 12/15] drm/xe/vram: Check disable_vram_page_offline policy in fault handler Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs Tejas Upadhyay
2026-08-31 6:55 ` Ghimiray, Himal Prasad
2026-08-31 9:18 ` sashiko-bot
2026-09-01 5:13 ` Upadhyay, Tejas
2026-08-31 6:49 ` [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
2026-08-31 9:40 ` sashiko-bot
2026-09-01 9:40 ` Upadhyay, Tejas
2026-08-31 6:49 ` [PATCH V19 15/15] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
2026-08-31 6:54 ` Ghimiray, Himal Prasad
2026-08-31 11:53 ` ✓ CI.KUnit: success for Add memory page offlining support (rev22) Patchwork
2026-08-31 13:28 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-31 13:58 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-08-31 14:04 ` [PATCH V19 00/15] Add memory page offlining support Rodrigo Vivi
2026-08-31 14:58 ` Matthew Brost
2026-09-01 4:09 ` Upadhyay, Tejas
2026-08-31 17:44 ` ✓ CI.KUnit: success for Add memory page offlining support (rev23) Patchwork
2026-08-31 18:32 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-31 22:22 ` ✗ Xe.CI.FULL: failure " Patchwork
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=20260831072409.994EB1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=tejas.upadhyay@intel.com \
/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.