High · published October 4, 2025
In the Linux kernel, the following vulnerability has been resolved:
nilfs2: fix potential UAF of struct nilfs_sc_info in nilfs_segctor_thread()
The finalization of nilfs_segctor_thread() can race with
nilfs_segctor_kill_thread() which terminates that thread, potentially
causing a use-after-free BUG as KASAN detected.
At the end of nilfs_segctor_thread(), it assigns NULL to "sc_task" member
of "struct nilfs_sc_info" to indicate the thread has finished, and then
notifies nilfs_segctor_kill_thread() of this using waitqueue
"sc_wait_task" on the struct nilfs_sc_info.
However, here, immediately after the NULL assignment to "sc_task", it is
possible that nilfs_segctor_kill_thread() will detect it and return to
continue the deallocation, freeing the nilfs_sc_info structure before the
thread does the notification.
This fixes the issue by protecting the NULL assignment to "sc_task" and
its notification, with spinlock "sc_state_lock" of the struct
nilfs_sc_info. Since nilfs_segctor_kill_thread() does a final check to
see if "sc_task" is NULL with "sc_state_lock" locked, this can eliminate
the race.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 2.6.30, < 4.14.313 | 4.14.313 |
| linux/linux_kernel | ≥ 4.15, < 4.19.281 | 4.19.281 |
| linux/linux_kernel | ≥ 4.20, < 5.4.241 | 5.4.241 |
| linux/linux_kernel | ≥ 5.5, < 5.10.178 | 5.10.178 |
| linux/linux_kernel | ≥ 5.11, < 5.15.107 | 5.15.107 |
| linux/linux_kernel | ≥ 5.16, < 6.1.24 | 6.1.24 |
| linux/linux_kernel | ≥ 6.2, < 6.2.11 | 6.2.11 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |