FlawAtlas
Search the atlas
CVE-2025-39977 Not scored

futex: Prevent use-after-free during requeue-PI

In the Linux kernel, the following vulnerability has been resolved: futex: Prevent use-after-free during requeue-PI syzbot managed to trigger the following race: T1 T2 futex_wait_requeue_pi() futex_do_wait() schedule() futex_requeue() futex_proxy_trylock_atomic() futex_requeue_pi_prepare() requeue_pi_wake_futex() futex_requeue_pi_complete() /* preempt */ * timeout/ signal wakes T1 * futex_requeue_pi_wakeup_sync() // Q_REQUEUE_PI_LOCKED futex_hash_put() // back to userland, on stack futex_q is garbage /* back */ wake_up_state(q->task, TASK_NORMAL); In this scenario futex_wait_requeue_pi() is able to leave without using futex_q::lock_ptr for synchronization. This can be prevented by reading futex_q::task before updating the futex_q::requeue_state. A reference on the task_struct is not needed because requeue_pi_wake_futex() is invoked with a spinlock_t held which implies a RCU read section. Even if T1 terminates immediately after, the task_struct will remain valid during T2's wake_up_state(). A READ_ONCE on futex_q::task before futex_requeue_pi_complete() is enough because it ensures that the variable is read before the state is updated. Read futex_q::task before updating the requeue state, use it for the following wakeup.

Exploit probability 0.2%
Published October 15, 2025
Required by Not available
Last source change July 16, 2026

02 / AFFECTED SOFTWARE

Affected packages

Linux Kernel
Unknown Unknown

03 / CONNECTIONS

Connected vulnerabilities

related OPENSUSE-SU-2026:20145-1
related SUSE-SU-2026:0263-1
related SUSE-SU-2026:0278-1
related SUSE-SU-2026:0281-1
related SUSE-SU-2026:0293-1
related SUSE-SU-2026:0315-1
related SUSE-SU-2026:0317-1
related SUSE-SU-2026:0411-1
related SUSE-SU-2026:0617-1
related SUSE-SU-2026:1684-1
related SUSE-SU-2026:1686-1
related SUSE-SU-2026:1694-1
related SUSE-SU-2026:1708-1
related SUSE-SU-2026:1710-1
related SUSE-SU-2026:1718-1
related SUSE-SU-2026:1725-1
related SUSE-SU-2026:1728-1
related SUSE-SU-2026:1733-1
related SUSE-SU-2026:1768-1
related SUSE-SU-2026:1771-1
related SUSE-SU-2026:1776-1
related SUSE-SU-2026:1787-1
related SUSE-SU-2026:1793-1
related SUSE-SU-2026:1798-1
related SUSE-SU-2026:1804-1
related SUSE-SU-2026:20207-1
related SUSE-SU-2026:20220-1
related SUSE-SU-2026:20228-1
related SUSE-SU-2026:20477-1
related SUSE-SU-2026:20498-1
related SUSE-SU-2026:20845-1
related SUSE-SU-2026:20876-1
related SUSE-SU-2026:21468-1
related SUSE-SU-2026:21469-1
related SUSE-SU-2026:21470-1
related SUSE-SU-2026:21471-1
related SUSE-SU-2026:21472-1
related SUSE-SU-2026:21473-1
related SUSE-SU-2026:21474-1
related SUSE-SU-2026:21475-1
related SUSE-SU-2026:21476-1
related SUSE-SU-2026:21477-1
related SUSE-SU-2026:21479-1
related SUSE-SU-2026:21480-1
related SUSE-SU-2026:21481-1
related SUSE-SU-2026:21482-1
related SUSE-SU-2026:21483-1
related SUSE-SU-2026:21484-1
related SUSE-SU-2026:21485-1
related SUSE-SU-2026:21487-1
related SUSE-SU-2026:21491-1
related SUSE-SU-2026:21495-1
related SUSE-SU-2026:21496-1
related SUSE-SU-2026:21497-1
related SUSE-SU-2026:21498-1
related SUSE-SU-2026:21499-1
related SUSE-SU-2026:21501-1
related SUSE-SU-2026:21503-1
related SUSE-SU-2026:21504-1
related SUSE-SU-2026:21505-1
related SUSE-SU-2026:21506-1
related SUSE-SU-2026:21507-1
related SUSE-SU-2026:21508-1
related SUSE-SU-2026:21509-1
related SUSE-SU-2026:21510-1
related SUSE-SU-2026:21511-1
related SUSE-SU-2026:21512-1
related SUSE-SU-2026:21513-1
related SUSE-SU-2026:21514-1
related SUSE-SU-2026:21515-1
related SUSE-SU-2026:21523-1
related SUSE-SU-2026:21526-1
related SUSE-SU-2026:21528-1
related SUSE-SU-2026:21529-1
related SUSE-SU-2026:21531-1
related SUSE-SU-2026:21532-1
related SUSE-SU-2026:21533-1
related SUSE-SU-2026:21555-1
related SUSE-SU-2026:21562-1
related SUSE-SU-2026:21563-1
related SUSE-SU-2026:21591-1
related SUSE-SU-2026:21598-1

04 / EVIDENCE

Source records

Open Source Vulnerabilities CVE-2025-39977

In the Linux kernel, the following vulnerability has been resolved: futex: Prevent use-after-free during requeue-PI syzbot managed to trigger the following race: T1 T2 futex_wait_requeue_pi() futex_do_wait() schedule() futex_requeue() futex_proxy_trylock_atomic() futex_requeue_pi_prepare() requeue_pi_wake_futex() futex_requeue_pi_complete() /* preempt */ * timeout/ signal wakes T1 * futex_requeue_pi_wakeup_sync() // Q_REQUEUE_PI_LOCKED futex_hash_put() // back to userland, on stack futex_q is garbage /* back */ wake_up_state(q->task, TASK_NORMAL); In this scenario futex_wait_requeue_pi() is able to leave without using futex_q::lock_ptr for synchronization. This can be prevented by reading futex_q::task before updating the futex_q::requeue_state. A reference on the task_struct is not needed because requeue_pi_wake_futex() is invoked with a spinlock_t held which implies a RCU read section. Even if T1 terminates immediately after, the task_struct will remain valid during T2's wake_up_state(). A READ_ONCE on futex_q::task before futex_requeue_pi_complete() is enough because it ensures that the variable is read before the state is updated. Read futex_q::task before updating the requeue state, use it for the following wakeup.

View original source

05 / REFERENCES

Further evidence