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)
Product status
7f80a2fd7db9a55894fd841915236aca611291b5 (git) before 3d6fb8a7690c23e3213c4b008f64d89a44b98737
7f80a2fd7db9a55894fd841915236aca611291b5 (git) before 640b4c00fb0e2920327435f6176cbefc3c546165
7f80a2fd7db9a55894fd841915236aca611291b5 (git) before 7b2800ba5f5f77a8ee7f4cbadb19cf1264597a34
7f80a2fd7db9a55894fd841915236aca611291b5 (git) before 6f49f94f3b11fe8bff1bf2a054143789e76aaf17
7f80a2fd7db9a55894fd841915236aca611291b5 (git) before 9756b3db5db6c2f5eccb32dddbd88eb4c54f575e
7f80a2fd7db9a55894fd841915236aca611291b5 (git) before c1fa0bb633e4a6b11e83ffc57fa5abe8ebb87891
5.17
Any version before 5.17
6.1.175 (semver)
6.6.140 (semver)
6.12.88 (semver)
6.18.30 (semver)
7.0.7 (semver)
7.1-rc4 (original_commit_for_fix)
References
git.kernel.org/...c/3d6fb8a7690c23e3213c4b008f64d89a44b98737
git.kernel.org/...c/640b4c00fb0e2920327435f6176cbefc3c546165
git.kernel.org/...c/7b2800ba5f5f77a8ee7f4cbadb19cf1264597a34
git.kernel.org/...c/6f49f94f3b11fe8bff1bf2a054143789e76aaf17
git.kernel.org/...c/9756b3db5db6c2f5eccb32dddbd88eb4c54f575e
git.kernel.org/...c/c1fa0bb633e4a6b11e83ffc57fa5abe8ebb87891