7.8
/ 10
HIGH
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Description
In the Linux kernel, the following vulnerability has been resolved:
exit: prevent preemption of oopsing TASK_DEAD task
When an already-exiting task oopses, make_task_dead() currently calls
do_task_dead() with preemption enabled. That is forbidden:
do_task_dead() calls __schedule(), which has a comment saying "WARNING:
must be called with preemption disabled!".
If an oopsing task is preempted in do_task_dead(), between becoming
TASK_DEAD and entering the scheduler explicitly, bad things happen:
finish_task_switch() assumes that once the scheduler has switched away
from a TASK_DEAD task, the task can never run again and its stack is no
longer needed; but that assumption apparently doesn't hold if the dead
task was preempted (the SM_PREEMPT case).
This means that the scheduler ends up repeatedly dropping references on
the dead task's stack, which can lead to use-after-free or double-free
of the entire task stack; in other words, two tasks can end up running
on the same stack, resulting in various kinds of memory corruption.
(This does not just affect "recursively oopsing" tasks; it is enough to
oops once during task exit, for example in a file_operations::release
handler)
exit: prevent preemption of oopsing TASK_DEAD task
When an already-exiting task oopses, make_task_dead() currently calls
do_task_dead() with preemption enabled. That is forbidden:
do_task_dead() calls __schedule(), which has a comment saying "WARNING:
must be called with preemption disabled!".
If an oopsing task is preempted in do_task_dead(), between becoming
TASK_DEAD and entering the scheduler explicitly, bad things happen:
finish_task_switch() assumes that once the scheduler has switched away
from a TASK_DEAD task, the task can never run again and its stack is no
longer needed; but that assumption apparently doesn't hold if the dead
task was preempted (the SM_PREEMPT case).
This means that the scheduler ends up repeatedly dropping references on
the dead task's stack, which can lead to use-after-free or double-free
of the entire task stack; in other words, two tasks can end up running
on the same stack, resulting in various kinds of memory corruption.
(This does not just affect "recursively oopsing" tasks; it is enough to
oops once during task exit, for example in a file_operations::release
handler)
Basic Information
ID
CVE-2026-46173
Source
Linux
Published
May 28, 2026 at 09:36
Modified
May 30, 2026 at 10:48
Affected Product
Vendor
Linux
Product
Linux
Version
7f80a2fd7db9a55894fd841915236aca611291b5
Affected Versions
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 5.17
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 7f80a2fd7db9a55894fd841915236aca611291b5
Linux Linux 5.17
References
- git.kernel.org /stable/c/640b4c00fb0e2920327435f6176cbefc3c546165
- git.kernel.org /stable/c/7b2800ba5f5f77a8ee7f4cbadb19cf1264597a34
- git.kernel.org /stable/c/6f49f94f3b11fe8bff1bf2a054143789e76aaf17
- git.kernel.org /stable/c/9756b3db5db6c2f5eccb32dddbd88eb4c54f575e
- git.kernel.org /stable/c/c1fa0bb633e4a6b11e83ffc57fa5abe8ebb87891