UBUNTU-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.
02 / AFFECTED SOFTWARE
Affected packages
34 explicit affected versions
12 explicit affected versions
6 explicit affected versions
5 explicit affected versions
8 explicit affected versions
10 explicit affected versions
7 explicit affected versions
39 explicit affected versions
13 explicit affected versions
3 explicit affected versions
13 explicit affected versions
26 explicit affected versions
79 explicit affected versions
13 explicit affected versions
4 explicit affected versions
55 explicit affected versions
7 explicit affected versions
4 explicit affected versions
11 explicit affected versions
32 explicit affected versions
12 explicit affected versions
89 explicit affected versions
50 explicit affected versions
6 explicit affected versions
12 explicit affected versions
30 explicit affected versions
19 explicit affected versions
10 explicit affected versions
6 explicit affected versions
100 explicit affected versions
24 explicit affected versions
85 explicit affected versions
84 explicit affected versions
86 explicit affected versions
76 explicit affected versions
10 explicit affected versions
26 explicit affected versions
90 explicit affected versions
7 explicit affected versions
84 explicit affected versions
10 explicit affected versions
34 explicit affected versions
13 explicit affected versions
37 explicit affected versions
35 explicit affected versions
8 explicit affected versions
51 explicit affected versions
50 explicit affected versions
18 explicit affected versions
42 explicit affected versions
64 explicit affected versions
39 explicit affected versions
13 explicit affected versions
4 explicit affected versions
71 explicit affected versions
23 explicit affected versions
45 explicit affected versions
1 explicit affected versions
21 explicit affected versions
9 explicit affected versions
16 explicit affected versions
41 explicit affected versions
8 explicit affected versions
7 explicit affected versions
12 explicit affected versions
11 explicit affected versions
7 explicit affected versions
12 explicit affected versions
14 explicit affected versions
10 explicit affected versions
1 explicit affected versions
96 explicit affected versions
7 explicit affected versions
9 explicit affected versions
12 explicit affected versions
12 explicit affected versions
34 explicit affected versions
45 explicit affected versions
16 explicit affected versions
5 explicit affected versions
23 explicit affected versions
13 explicit affected versions
27 explicit affected versions
10 explicit affected versions
37 explicit affected versions
10 explicit affected versions
13 explicit affected versions
33 explicit affected versions
3 explicit affected versions
10 explicit affected versions
11 explicit affected versions
68 explicit affected versions
26 explicit affected versions
5 explicit affected versions
13 explicit affected versions
37 explicit affected versions
29 explicit affected versions
34 explicit affected versions
92 explicit affected versions
55 explicit affected versions
33 explicit affected versions
23 explicit affected versions
60 explicit affected versions
10 explicit affected versions
13 explicit affected versions
12 explicit affected versions
11 explicit affected versions
5 explicit affected versions
12 explicit affected versions
7 explicit affected versions
5 explicit affected versions
77 explicit affected versions
93 explicit affected versions
10 explicit affected versions
26 explicit affected versions
1 explicit affected versions
69 explicit affected versions
28 explicit affected versions
40 explicit affected versions
11 explicit affected versions
13 explicit affected versions
39 explicit affected versions
16 explicit affected versions
91 explicit affected versions
80 explicit affected versions
43 explicit affected versions
3 explicit affected versions
7 explicit affected versions
2 explicit affected versions
3 explicit affected versions
51 explicit affected versions
5 explicit affected versions
18 explicit affected versions
35 explicit affected versions
12 explicit affected versions
27 explicit affected versions
66 explicit affected versions
36 explicit affected versions
8 explicit affected versions
13 explicit affected versions
7 explicit affected versions
8 explicit affected versions
10 explicit affected versions
12 explicit affected versions
9 explicit affected versions
39 explicit affected versions
44 explicit affected versions
16 explicit affected versions
45 explicit affected versions
37 explicit affected versions
44 explicit affected versions
14 explicit affected versions
38 explicit affected versions
9 explicit affected versions
5 explicit affected versions
11 explicit affected versions
80 explicit affected versions
32 explicit affected versions
15 explicit affected versions
2 explicit affected versions
92 explicit affected versions
8 explicit affected versions
81 explicit affected versions
1 explicit affected versions
1 explicit affected versions
1 explicit affected versions
91 explicit affected versions
43 explicit affected versions
10 explicit affected versions
8 explicit affected versions
38 explicit affected versions
14 explicit affected versions
78 explicit affected versions
2 explicit affected versions
11 explicit affected versions
1 explicit affected versions
12 explicit affected versions
32 explicit affected versions
80 explicit affected versions
03 / CONNECTIONS
Connected vulnerabilities
04 / EVIDENCE
Source records
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.
05 / REFERENCES
Further evidence
- https://git.kernel.org/linus/b549113738e8c751b613118032a724b772aa83f2
- https://git.kernel.org/stable/c/348736955ed6ca6e99ca24b93b1d3fbfe352c181
- https://git.kernel.org/stable/c/a170b9c0dde83312b8b58ccc91509c7c15711641
- https://git.kernel.org/stable/c/b549113738e8c751b613118032a724b772aa83f2
- https://git.kernel.org/stable/c/cb5d19a61274b51b49601214a87af573b43d60fa
- https://git.kernel.org/stable/c/d824b2dbdcfe3c390278dd9652ea526168ef6850
- https://ubuntu.com/security/CVE-2025-39977
- https://ubuntu.com/security/notices/USN-8095-1
- https://ubuntu.com/security/notices/USN-8095-2
- https://ubuntu.com/security/notices/USN-8095-3
- https://ubuntu.com/security/notices/USN-8095-4
- https://ubuntu.com/security/notices/USN-8095-5
- https://ubuntu.com/security/notices/USN-8100-1
- https://ubuntu.com/security/notices/USN-8125-1
- https://ubuntu.com/security/notices/USN-8126-1
- https://ubuntu.com/security/notices/USN-8165-1
- https://ubuntu.com/security/notices/USN-8261-1
- https://www.cve.org/CVERecord?id=CVE-2025-39977