CVE-2022-48950

In the Linux kernel, the following vulnerability has been resolved: perf: Fix perf_pending_task() UaF Per syzbot it is possible for perf_pending_task() to run after the event is free()'d. There are two related but distinct cases: - the task_work was already queued before destroying the event; - destroying the event itself queues the task_work. The first cannot be solved using task_work_cancel() since perf_release() itself might be called from a task_work (____fput), which means the current->task_works list is already empty and task_work_cancel() won't be able to find the perf_pending_task() entry. The simplest alternative is extending the perf_event lifetime to cover the task_work. The second is just silly, queueing a task_work while you know the event is going away makes no sense and is easily avoided by re-arranging how the event is marked STATE_DEAD and ensuring it goes through STATE_OFF on the way down.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc5:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc6:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc7:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc8:*:*:*:*:*:*

History

25 Oct 2024, 20:02

Type Values Removed Values Added
References () https://git.kernel.org/stable/c/517e6a301f34613bff24a8e35b5455884f2d83d8 - () https://git.kernel.org/stable/c/517e6a301f34613bff24a8e35b5455884f2d83d8 - Patch
References () https://git.kernel.org/stable/c/78e1317a174edbfd1182599bf76c092a2877672c - () https://git.kernel.org/stable/c/78e1317a174edbfd1182599bf76c092a2877672c - Patch
References () https://git.kernel.org/stable/c/8bffa95ac19ff27c8261904f89d36c7fcf215d59 - () https://git.kernel.org/stable/c/8bffa95ac19ff27c8261904f89d36c7fcf215d59 - Patch
CPE cpe:2.3:o:linux:linux_kernel:6.1:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc7:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc6:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc5:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc8:*:*:*:*:*:*
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 7.8
First Time Linux linux Kernel
Linux
CWE CWE-416

23 Oct 2024, 15:13

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: perf: Fix perf_pending_task() UaF Por syzbot es posible que perf_pending_task() se ejecute después de que el evento sea free(). Hay dos casos relacionados pero distintos: - el task_work ya estaba en cola antes de destruir el evento; - destruir el evento en sí mismo pone en cola el task_work. El primero no se puede resolver usando task_work_cancel() ya que perf_release() en sí mismo podría ser llamado desde un task_work (____fput), lo que significa que la lista current->task_works ya está vacía y task_work_cancel() no podrá encontrar la entrada perf_pending_task(). La alternativa más simple es extender la duración de perf_event para cubrir el task_work. El segundo es simplemente una tontería, poner en cola una tarea_trabajo mientras sabes que el evento va a desaparecer no tiene sentido y se evita fácilmente reorganizando cómo se marca el evento como STATE_DEAD y asegurándose de que pase por STATE_OFF en el camino hacia abajo.

21 Oct 2024, 20:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-10-21 20:15

Updated : 2024-10-25 20:02


NVD link : CVE-2022-48950

Mitre link : CVE-2022-48950

CVE.ORG link : CVE-2022-48950


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-416

Use After Free