From: sashiko-bot@kernel.org
To: "Junrui Luo" <moonafterrain@outlook.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 2/2] drm/nouveau/uvmm: reject a second VM_INIT
Date: Sat, 08 Aug 2026 11:35:43 +0000 [thread overview]
Message-ID: <20260808113544.CDFF71F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260808-nouveau-fixes-v1-2-c3ebdc17a89c@outlook.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Lockless access to `cli->uvmm.ptr` lacks memory barriers, potentially allowing readers to observe a partially initialized `uvmm` struct.
--
--- Patch [2]: [PATCH 2/2] drm/nouveau/uvmm: reject a second VM_INIT ---
commit 8aef81c8581a1b964e410ee072207a76a4098339
Author: Junrui Luo <moonafterrain@outlook.com>
drm/nouveau/uvmm: reject a second VM_INIT
nouveau_uvmm_ioctl_vm_init() sets up the GPU VA space for a drm_file and
is reachable from an unprivileged render node client. The patch prevents
DRM_IOCTL_NOUVEAU_VM_INIT from dropping the previous nouveau_uvmm and
leaking kernel memory by checking if cli->uvmm.ptr is already set.
> diff --git a/drivers/gpu/drm/nouveau/nouveau_uvmm.c b/drivers/gpu/drm/nouveau/nouveau_uvmm.c
> index bced1481674e7..26d2a57b5aacc 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_uvmm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_uvmm.c
> @@ -1929,6 +1929,12 @@ nouveau_uvmm_ioctl_vm_init(struct drm_device *dev,
> goto out_unlock;
> }
>
> + /* Check that a GPU VA space isn't already set up for the client. */
> + if (cli->uvmm.ptr) {
> + ret = -EBUSY;
> + goto out_unlock;
> + }
> +
[Severity: High]
This is a pre-existing issue, but since we are checking cli->uvmm.ptr here,
is it safe that the writer publishes this pointer locklessly later in this
same function?
Further down in nouveau_uvmm_ioctl_vm_init(), the pointer is assigned without
memory barriers:
uvmm->vmm.cli = cli;
cli->uvmm.ptr = uvmm;
mutex_unlock(&cli->mutex);
Could the compiler or CPU reorder this store before the uvmm structure is
fully initialized, causing readers to see a partially initialized struct?
For example, concurrent calls to nouveau_cli_uvmm() load cli->uvmm.ptr without
READ_ONCE() or smp_load_acquire():
drivers/gpu/drm/nouveau/nouveau_drv.h:nouveau_cli_uvmm() {
return cli ? cli->uvmm.ptr : NULL;
}
If another thread executes DRM_IOCTL_MODE_CREATE_DUMB, it can follow a lockless
path through nouveau_gem_new() into nouveau_bo_alloc() which dereferences the
vmm structure:
drivers/gpu/drm/nouveau/nouveau_bo.c:nouveau_bo_alloc() {
...
struct nvif_vmm *vmm = &nouveau_cli_vmm(cli)->vmm;
...
for (i = 0; i < vmm->page_nr; i++) {
...
}
Alternatively, nouveau_debugfs_gpuva() iterates clients and locklessly reads
cli->uvmm.ptr, then immediately calls nouveau_uvmm_lock() on it. Could this
trigger a crash if the mutex appears uninitialized?
Would using smp_store_release() for the assignment and smp_load_acquire()
for the readers ensure proper visibility of the initialized structure?
> uvmm = kzalloc_obj(*uvmm);
> if (!uvmm) {
> ret = -ENOMEM;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260808-nouveau-fixes-v1-0-c3ebdc17a89c@outlook.com?part=2
prev parent reply other threads:[~2026-08-08 11:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-08 11:14 [PATCH 0/2] drm/nouveau: fix unbounded kernel allocations in the VM_BIND uAPI Junrui Luo via B4 Relay
2026-08-08 11:14 ` Junrui Luo
2026-08-08 11:14 ` [PATCH 1/2] drm/nouveau: bound sync and op counts in EXEC and VM_BIND Junrui Luo via B4 Relay
2026-08-08 11:14 ` Junrui Luo
2026-08-08 11:27 ` sashiko-bot
2026-08-09 22:43 ` David Airlie
2026-08-09 22:43 ` David Airlie
2026-08-11 4:00 ` Junrui Luo
2026-08-11 4:00 ` Junrui Luo
2026-08-11 4:05 ` Dave Airlie
2026-08-11 4:05 ` Dave Airlie
2026-08-08 11:14 ` [PATCH 2/2] drm/nouveau/uvmm: reject a second VM_INIT Junrui Luo via B4 Relay
2026-08-08 11:14 ` Junrui Luo
2026-08-08 11:35 ` sashiko-bot [this message]
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=20260808113544.CDFF71F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=moonafterrain@outlook.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 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.