// For flags

CVE-2023-52609

binder: fix race between mmput() and do_exit()

Severity Score

7.1
*CVSS v3

Exploit Likelihood

*EPSS

Affected Versions

*CPE

Public Exploits

0
*Multiple Sources

Exploited in Wild

-
*KEV

Decision

Track
*SSVC
Descriptions

In the Linux kernel, the following vulnerability has been resolved: binder: fix race between mmput() and do_exit() Task A calls binder_update_page_range() to allocate and insert pages on
a remote address space from Task B. For this, Task A pins the remote mm
via mmget_not_zero() first. This can race with Task B do_exit() and the
final mmput() refcount decrement will come from Task A. Task A | Task B ------------------+------------------ mmget_not_zero() | | do_exit() | exit_mm() | mmput() mmput() | exit_mmap() | remove_vma() | fput() | In this case, the work of ____fput() from Task B is queued up in Task A
as TWA_RESUME. So in theory, Task A returns to userspace and the cleanup
work gets executed. However, Task A instead sleep, waiting for a reply
from Task B that never comes (it's dead). This means the binder_deferred_release() is blocked until an unrelated
binder event forces Task A to go back to userspace. All the associated
death notifications will also be delayed until then. In order to fix this use mmput_async() that will schedule the work in
the corresponding mm->async_put_work WQ instead of Task A.

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: binder: corrige la ejecución entre mmput() y do_exit() La tarea A llama a binder_update_page_range() para asignar e insertar páginas en un espacio de direcciones remoto desde la tarea B. Para esto, la tarea A fija el mm remoto a través de mmget_not_zero() primero. Esto puede competir con la Tarea B do_exit() y la disminución final del recuento de mmput() provendrá de la Tarea A. Tarea A | Tarea B ------------------+------------------ mmget_not_zero() | | hacer_salir() | salida_mm() | mmput() mmput() | salida_mmap() | eliminar_vma() | salida() | En este caso, el trabajo de ____fput() de la Tarea B se pone en cola en la Tarea A como TWA_RESUME. Entonces, en teoría, la Tarea A regresa al espacio de usuario y se ejecuta el trabajo de limpieza. Sin embargo, la Tarea A duerme, esperando una respuesta de la Tarea B que nunca llega (está muerta). Esto significa que binder_deferred_release() está bloqueado hasta que un evento de carpeta no relacionado obligue a la Tarea A a regresar al espacio de usuario. Todas las notificaciones de defunción asociadas también se retrasarán hasta entonces. Para solucionar este problema, utilice mmput_async() que programará el trabajo en el mm->async_put_work WQ correspondiente en lugar de la Tarea A.

In the Linux kernel, the following vulnerability has been resolved: binder: fix race between mmput() and do_exit() Task A calls binder_update_page_range() to allocate and insert pages on a remote address space from Task B. For this, Task A pins the remote mm via mmget_not_zero() first. This can race with Task B do_exit() and the final mmput() refcount decrement will come from Task A. Task A | Task B ------------------+------------------ mmget_not_zero() | | do_exit() | exit_mm() | mmput() mmput() | exit_mmap() | remove_vma() | fput() | In this case, the work of ____fput() from Task B is queued up in Task A as TWA_RESUME. So in theory, Task A returns to userspace and the cleanup work gets executed. However, Task A instead sleep, waiting for a reply from Task B that never comes (it's dead). This means the binder_deferred_release() is blocked until an unrelated binder event forces Task A to go back to userspace. All the associated death notifications will also be delayed until then. In order to fix this use mmput_async() that will schedule the work in the corresponding mm->async_put_work WQ instead of Task A.

Chih-Yen Chang discovered that the KSMBD implementation in the Linux kernel did not properly validate certain data structure fields when parsing lease contexts, leading to an out-of-bounds read vulnerability. A remote attacker could use this to cause a denial of service or possibly expose sensitive information. Quentin Minster discovered that a race condition existed in the KSMBD implementation in the Linux kernel, leading to a use-after-free vulnerability. A remote attacker could use this to cause a denial of service or possibly execute arbitrary code.

*Credits: N/A
CVSS Scores
Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
High
Attack Vector
Local
Attack Complexity
Medium
Authentication
None
Confidentiality
Complete
Integrity
Complete
Availability
Complete
* Common Vulnerability Scoring System
SSVC
  • Decision:Track
Exploitation
None
Automatable
No
Tech. Impact
Partial
* Organization's Worst-case Scenario
Timeline
  • 2024-03-06 CVE Reserved
  • 2024-03-18 CVE Published
  • 2024-12-19 CVE Updated
  • 2025-03-18 EPSS Updated
  • ---------- Exploited in Wild
  • ---------- KEV Due Date
  • ---------- First Exploit
CWE
CAPEC
Affected Vendors, Products, and Versions
Vendor Product Version Other Status
Vendor Product Version Other Status <-- --> Vendor Product Version Other Status
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 4.19.306
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 4.19.306"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 5.4.268
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 5.4.268"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 5.10.209
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 5.10.209"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 5.15.148
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 5.15.148"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 6.1.75
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 6.1.75"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 6.6.14
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 6.6.14"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 6.7.2
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 6.7.2"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 2.6.29 < 6.8
Search vendor "Linux" for product "Linux Kernel" and version " >= 2.6.29 < 6.8"
en
Affected