CVE-2025-68260
Publication date:
16/12/2025
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
rust_binder: fix race condition on death_list<br />
<br />
Rust Binder contains the following unsafe operation:<br />
<br />
// SAFETY: A `NodeDeath` is never inserted into the death list<br />
// of any node other than its owner, so it is either in this<br />
// death list or in no death list.<br />
unsafe { node_inner.death_list.remove(self) };<br />
<br />
This operation is unsafe because when touching the prev/next pointers of<br />
a list element, we have to ensure that no other thread is also touching<br />
them in parallel. If the node is present in the list that `remove` is<br />
called on, then that is fine because we have exclusive access to that<br />
list. If the node is not in any list, then it&#39;s also ok. But if it&#39;s<br />
present in a different list that may be accessed in parallel, then that<br />
may be a data race on the prev/next pointers.<br />
<br />
And unfortunately that is exactly what is happening here. In<br />
Node::release, we:<br />
<br />
1. Take the lock.<br />
2. Move all items to a local list on the stack.<br />
3. Drop the lock.<br />
4. Iterate the local list on the stack.<br />
<br />
Combined with threads using the unsafe remove method on the original<br />
list, this leads to memory corruption of the prev/next pointers. This<br />
leads to crashes like this one:<br />
<br />
Unable to handle kernel paging request at virtual address 000bb9841bcac70e<br />
Mem abort info:<br />
ESR = 0x0000000096000044<br />
EC = 0x25: DABT (current EL), IL = 32 bits<br />
SET = 0, FnV = 0<br />
EA = 0, S1PTW = 0<br />
FSC = 0x04: level 0 translation fault<br />
Data abort info:<br />
ISV = 0, ISS = 0x00000044, ISS2 = 0x00000000<br />
CM = 0, WnR = 1, TnD = 0, TagAccess = 0<br />
GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0<br />
[000bb9841bcac70e] address between user and kernel address ranges<br />
Internal error: Oops: 0000000096000044 [#1] PREEMPT SMP<br />
google-cdd 538c004.gcdd: context saved(CPU:1)<br />
item - log_kevents is disabled<br />
Modules linked in: ... rust_binder<br />
CPU: 1 UID: 0 PID: 2092 Comm: kworker/1:178 Tainted: G S W OE 6.12.52-android16-5-g98debd5df505-4k #1 f94a6367396c5488d635708e43ee0c888d230b0b<br />
Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE<br />
Hardware name: MUSTANG PVT 1.0 based on LGA (DT)<br />
Workqueue: events _RNvXs6_NtCsdfZWD8DztAw_6kernel9workqueueINtNtNtB7_4sync3arc3ArcNtNtCs8QPsHWIn21X_16rust_binder_main7process7ProcessEINtB5_15WorkItemPointerKy0_E3runB13_ [rust_binder]<br />
pstate: 23400005 (nzCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)<br />
pc : _RNvXs3_NtCs8QPsHWIn21X_16rust_binder_main7processNtB5_7ProcessNtNtCsdfZWD8DztAw_6kernel9workqueue8WorkItem3run+0x450/0x11f8 [rust_binder]<br />
lr : _RNvXs3_NtCs8QPsHWIn21X_16rust_binder_main7processNtB5_7ProcessNtNtCsdfZWD8DztAw_6kernel9workqueue8WorkItem3run+0x464/0x11f8 [rust_binder]<br />
sp : ffffffc09b433ac0<br />
x29: ffffffc09b433d30 x28: ffffff8821690000 x27: ffffffd40cbaa448<br />
x26: ffffff8821690000 x25: 00000000ffffffff x24: ffffff88d0376578<br />
x23: 0000000000000001 x22: ffffffc09b433c78 x21: ffffff88e8f9bf40<br />
x20: ffffff88e8f9bf40 x19: ffffff882692b000 x18: ffffffd40f10bf00<br />
x17: 00000000c006287d x16: 00000000c006287d x15: 00000000000003b0<br />
x14: 0000000000000100 x13: 000000201cb79ae0 x12: fffffffffffffff0<br />
x11: 0000000000000000 x10: 0000000000000001 x9 : 0000000000000000<br />
x8 : b80bb9841bcac706 x7 : 0000000000000001 x6 : fffffffebee63f30<br />
x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000<br />
x2 : 0000000000004c31 x1 : ffffff88216900c0 x0 : ffffff88e8f9bf00<br />
Call trace:<br />
_RNvXs3_NtCs8QPsHWIn21X_16rust_binder_main7processNtB5_7ProcessNtNtCsdfZWD8DztAw_6kernel9workqueue8WorkItem3run+0x450/0x11f8 [rust_binder bbc172b53665bbc815363b22e97e3f7e3fe971fc]<br />
process_scheduled_works+0x1c4/0x45c<br />
worker_thread+0x32c/0x3e8<br />
kthread+0x11c/0x1c8<br />
ret_from_fork+0x10/0x20<br />
Code: 94218d85 b4000155 a94026a8 d10102a0 (f9000509)<br />
---[ end trace 0000000000000000 ]---<br />
<br />
Thus, modify Node::release to pop items directly off the original list.
Severity CVSS v4.0: Pending analysis
Last modification:
18/12/2025