From: sashiko-bot@kernel.org
To: "Mika Kuoppala" <mika.kuoppala@linux.intel.com>,
intel-xe@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 13/20] drm/xe/eudebug: Add vm open/pread/pwrite
Date: Mon, 09 Nov 2026 14:22:10 +0000 [thread overview]
Message-ID: <sashiko-outbox-205080@kernel.org> (raw)
In-Reply-To: <20261109135549.4128280-14-mika.kuoppala@linux.intel.com>
Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [Medium] drm/xe/eudebug: unlocked vm->size reads in
__xe_eudebug_vm_access()
- [Low] drm/xe/eudebug: detach race in __xe_eudebug_vm_access() returns
-EINVAL
--
commit a3a16f65fbfea0ccc25672bcf54427e90a80cace
Author: Mika Kuoppala <mika.kuoppala@linux.intel.com>
drm/xe/eudebug: Add vm open/pread/pwrite
This commit adds the DRM_XE_EUDEBUG_IOCTL_VM_OPEN ioctl and file operations
for reading, writing, and syncing a target client's BO-backed VM mappings.
> diff --git a/drivers/gpu/drm/xe/xe_eudebug_vm.c b/drivers/gpu/drm/xe/xe_eudebug_vm.c
> new file mode 100644
> index 0000000000000..385fcc7e8f5c2
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eudebug_vm.c
[ ... ]
> +static ssize_t __xe_eudebug_vm_access(struct file *file,
> + char __user *r_buffer,
> + const char __user *w_buffer,
> + size_t count, loff_t *__pos)
> +{
> + struct vm_file *vmf = file->private_data;
> + struct xe_eudebug * const d = vmf->debugger;
> + struct xe_device * const xe = d->xe;
> + const bool write = !!w_buffer;
> + struct xe_vm *vm;
> + ssize_t copied = 0;
> + ssize_t bytes_left;
> + ssize_t ret;
> + unsigned long alloc_len;
> + loff_t pos = *__pos;
> + void *k_buffer;
> +
> + if (XE_IOCTL_DBG(d->xe, xe_eudebug_is_detached(d)))
> + return -ENOTCONN;
> +
> + if (XE_IOCTL_DBG(xe, write && r_buffer))
> + return -EINVAL;
> +
> + vm = xe_eudebug_vm_get(d, vmf->vm_handle);
> + if (XE_IOCTL_DBG(xe, !vm))
> + return -EINVAL;
[Severity: Low]
Can __xe_eudebug_vm_access() return -EINVAL instead of -ENOTCONN if the
target detaches between xe_eudebug_is_detached() and xe_eudebug_vm_get()?
CPU0 CPU1
__xe_eudebug_vm_access()
xe_eudebug_is_detached(d)
-> false
xe_eudebug_detach()
d->target.xef = NULL
xe_eudebug_resources_clear(d)
xe_eudebug_vm_get(d, ...)
-> NULL
return -EINVAL; <-- expected -ENOTCONN
Checking xe_eudebug_is_detached(d) when !vm, as xe_eudebug_vm_open_ioctl()
does, would return -ENOTCONN as documented in the UAPI header.
> +
> + if (XE_IOCTL_DBG(xe, vm != vmf->vm)) {
> + eu_warn(d, "vm_access(%s): vm handle mismatch vm_handle=%llu, flags=0x%llx, pos=%llu, count=%zu\n",
> + str_write_read(write),
> + vmf->vm_handle, vmf->flags, pos, count);
> + xe_vm_put(vm);
> + return -EINVAL;
> + }
> +
> + if (!count) {
> + xe_vm_put(vm);
> + return 0;
> + }
> +
> + if (pos >= vm->size) {
> + xe_vm_put(vm);
> + return write ? -ENOSPC : 0;
> + }
> +
> + count = min_t(u64, count, vm->size - pos);
> + bytes_left = count;
> +
> + alloc_len = min_t(unsigned long, ALIGN(count, PAGE_SIZE), 64 * SZ_1M);
> + do {
> + k_buffer = __vmalloc(alloc_len, GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
[Severity: Medium]
Can reading vm->size twice without holding vm->lock race with xe_vm_close()
zeroing vm->size?
drivers/gpu/drm/xe/xe_vm.c:xe_vm_close() {
down_write(&vm->lock);
xe_vm_lock(vm, false);
if (xe_vm_in_fault_mode(vm))
xe_svm_notifier_lock(vm);
vm->size = 0;
...
}
CPU0 CPU1
__xe_eudebug_vm_access()
vm = xe_eudebug_vm_get(...)
xe_vm_close(vm)
down_write(&vm->lock)
if (pos >= vm->size)
-> false (pos == 0)
vm->size = 0
up_write(&vm->lock)
count = min_t(u64, count,
vm->size - pos)
-> 0
alloc_len = 0
__vmalloc(0, ...) <-- hits WARN_ON_ONCE(!size)
If pos > 0 when vm->size becomes 0 between the two reads, vm->size - pos
underflows u64; if vm->size is already 0 at the first read, pread() returns
0 (EOF) and pwrite() returns -ENOSPC instead of -EINVAL for a closed VM.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261109135549.4128280-1-mika.kuoppala@linux.intel.com?part=13
next prev parent reply other threads:[~2026-11-09 14:22 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 13:55 [PATCH 00/20] Intel Xe GPU Debug Support (eudebug) v11 Mika Kuoppala
2026-11-09 13:55 ` [PATCH 01/20] drm/ttm: Add ttm_bo_access_locked() Mika Kuoppala
2026-11-09 13:55 ` [PATCH 02/20] drm/xe/eudebug: Introduce eudebug interface Mika Kuoppala
2026-11-09 13:55 ` [PATCH 03/20] drm/xe/eudebug: Add documentation Mika Kuoppala
2026-11-09 13:55 ` [PATCH 04/20] drm/xe/eudebug: Add connection establishment documentation Mika Kuoppala
2026-11-09 13:55 ` [PATCH 05/20] drm/xe: Implement SR-IOV and eudebug exclusivity Mika Kuoppala
2026-11-09 13:55 ` [PATCH 06/20] drm/xe/eudebug: Introduce discovery for resources Mika Kuoppala
2026-11-09 13:55 ` [PATCH 07/20] drm/xe: Add EUDEBUG_ENABLE exec queue property Mika Kuoppala
2026-11-09 13:55 ` [PATCH 08/20] drm/xe/eudebug: Introduce exec_queue events Mika Kuoppala
2026-11-09 14:16 ` sashiko-bot
2026-11-09 13:55 ` [PATCH 09/20] drm/xe/eudebug: Mark guc contexts as debuggable Mika Kuoppala
2026-11-09 13:55 ` [PATCH 10/20] drm/xe: Introduce ADD_DEBUG_DATA and REMOVE_DEBUG_DATA vm bind ops Mika Kuoppala
2026-11-09 13:55 ` [PATCH 11/20] drm/xe/eudebug: Introduce vm bind and vm bind debug data events Mika Kuoppala
2026-11-09 14:12 ` sashiko-bot
2026-11-09 13:55 ` [PATCH 12/20] drm/xe/eudebug: Add ufence events with acks Mika Kuoppala
2026-11-09 14:22 ` sashiko-bot
2026-11-09 13:55 ` [PATCH 13/20] drm/xe/eudebug: Add vm open/pread/pwrite Mika Kuoppala
2026-11-09 14:22 ` sashiko-bot [this message]
2026-11-09 13:55 ` [PATCH 14/20] drm/xe/eudebug: Add userptr vm pread/pwrite Mika Kuoppala
2026-11-09 13:55 ` [PATCH 15/20] drm/xe/eudebug: Add hw enablement Mika Kuoppala
2026-11-09 13:55 ` [PATCH 16/20] drm/xe/eudebug: Track debuggable exec queues Mika Kuoppala
2026-11-09 13:55 ` [PATCH 17/20] drm/xe/eudebug: Introduce EU control interface Mika Kuoppala
2026-11-09 14:35 ` sashiko-bot
2026-11-09 13:55 ` [PATCH 18/20] drm/xe/eudebug: Introduce per device attention scan worker Mika Kuoppala
2026-11-09 14:24 ` sashiko-bot
2026-11-09 13:55 ` [PATCH 19/20] drm/xe/eudebug_test: Introduce eudebug live tests Mika Kuoppala
2026-11-09 13:55 ` [PATCH 20/20] drm/xe: Add xe_client_debugfs and introduce debug_data file Mika Kuoppala
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=sashiko-outbox-205080@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=mika.kuoppala@linux.intel.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox