CVE-2025-40329

CVE-2025-40329

published December 9, 2025

CVSS
—
EPSS
0%
Percentile
12.2
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

drm/sched: Fix deadlock in drm_sched_entity_kill_jobs_cb

The Mesa issue referenced below pointed out a possible deadlock:

[ 1231.611031] Possible interrupt unsafe locking scenario:

[ 1231.611033] CPU0 CPU1

[ 1231.611034] ---- ----

[ 1231.611035] lock(&xa->xa_lock#17);

[ 1231.611038] local_irq_disable();

[ 1231.611039] lock(&fence->lock);

[ 1231.611041] lock(&xa->xa_lock#17);

[ 1231.611044] <Interrupt>

[ 1231.611045] lock(&fence->lock);

[ 1231.611047]

*** DEADLOCK ***

In this example, CPU0 would be any function accessing job->dependencies

through the xa_* functions that don't disable interrupts (eg:

drm_sched_job_add_dependency(), drm_sched_entity_kill_jobs_cb()).

CPU1 is executing drm_sched_entity_kill_jobs_cb() as a fence signalling

callback so in an interrupt context. It will deadlock when trying to

grab the xa_lock which is already held by CPU0.

Replacing all xa_* usage by their xa_*_irq counterparts would fix

this issue, but Christian pointed out another issue: dma_fence_signal

takes fence.lock and so does dma_fence_add_callback.

dma_fence_signal() // locks f1.lock

-> drm_sched_entity_kill_jobs_cb()

-> foreach dependencies

-> dma_fence_add_callback() // locks f2.lock

This will deadlock if f1 and f2 share the same spinlock.

To fix both issues, the code iterating on dependencies and re-arming them

is moved out to drm_sched_entity_kill_jobs_work().

[phasta: commit message nits]

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00223 · 12.2th percentile
Published
2025-12-09T21:17Z
References (4)
EPSS history
Timeline
  • 09 DEC 04:09Z
    drm/sched: Fix deadlock in drm_sched_entity_kill_jobs_cb
    cvelistv5