CVE-2022-48800

In the Linux kernel, the following vulnerability has been resolved: mm: vmscan: remove deadlock due to throttling failing to make progress A soft lockup bug in kcompactd was reported in a private bugzilla with the following visible in dmesg; watchdog: BUG: soft lockup - CPU#33 stuck for 26s! [kcompactd0:479] watchdog: BUG: soft lockup - CPU#33 stuck for 52s! [kcompactd0:479] watchdog: BUG: soft lockup - CPU#33 stuck for 78s! [kcompactd0:479] watchdog: BUG: soft lockup - CPU#33 stuck for 104s! [kcompactd0:479] The machine had 256G of RAM with no swap and an earlier failed allocation indicated that node 0 where kcompactd was run was potentially unreclaimable; Node 0 active_anon:29355112kB inactive_anon:2913528kB active_file:0kB inactive_file:0kB unevictable:64kB isolated(anon):0kB isolated(file):0kB mapped:8kB dirty:0kB writeback:0kB shmem:26780kB shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 23480320kB writeback_tmp:0kB kernel_stack:2272kB pagetables:24500kB all_unreclaimable? yes Vlastimil Babka investigated a crash dump and found that a task migrating pages was trying to drain PCP lists; PID: 52922 TASK: ffff969f820e5000 CPU: 19 COMMAND: "kworker/u128:3" Call Trace: __schedule schedule schedule_timeout wait_for_completion __flush_work __drain_all_pages __alloc_pages_slowpath.constprop.114 __alloc_pages alloc_migration_target migrate_pages migrate_to_node do_migrate_pages cpuset_migrate_mm_workfn process_one_work worker_thread kthread ret_from_fork This failure is specific to CONFIG_PREEMPT=n builds. The root of the problem is that kcompact0 is not rescheduling on a CPU while a task that has isolated a large number of the pages from the LRU is waiting on kcompact0 to reschedule so the pages can be released. While shrink_inactive_list() only loops once around too_many_isolated, reclaim can continue without rescheduling if sc->skipped_deactivate == 1 which could happen if there was no file LRU and the inactive anon list was not low.
Configurations

Configuration 1 (hide)

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

History

21 Aug 2024, 18:04

Type Values Removed Values Added
CWE CWE-667
First Time Linux linux Kernel
Linux
CPE cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: mm: vmscan: elimina el punto muerto debido a que la aceleración no logra avanzar. Se informó un error de bloqueo suave en kcompactd en un bugzilla privado con lo siguiente visible en dmesg; perro guardián: ERROR: bloqueo suave - ¡CPU n.° 33 bloqueada durante 26 segundos! [kcompactd0:479] perro guardián: ERROR: bloqueo suave - ¡CPU#33 bloqueada durante 52 segundos! [kcompactd0:479] perro guardián: ERROR: bloqueo suave - ¡CPU#33 bloqueada durante 78 segundos! [kcompactd0:479] perro guardián: ERROR: bloqueo suave - ¡CPU#33 bloqueada durante 104! [kcompactd0:479] La máquina tenía 256 GB de RAM sin intercambio y una asignación fallida anterior indicó que el nodo 0 donde se ejecutaba kcompactd era potencialmente no recuperable; Nodo 0 active_anon:29355112kB inactive_anon:2913528kB active_file:0kB inactive_file:0kB inevitable:64kB aislado(anon):0kB aislado(archivo):0kB mapeado:8kB sucio:0kB escritura regresiva:0kB shmem:26780kB shmem_thp: 0kB shmem_pmdmapped : 0kB anon_thp: 23480320kB writeback_tmp:0kB kernel_stack:2272kB tablas de páginas:24500kB ¿todo_unreclamable? sí, Vlastimil Babka investigó un volcado de memoria y descubrió que una tarea que migraba páginas intentaba drenar las listas de PCP; PID: 52922 TAREA: ffff969f820e5000 CPU: 19 COMANDO: "kworker/u128:3" Seguimiento de llamadas: __schedule Schedule Schedule_timeout wait_for_completion __flush_work __drain_all_pages __alloc_pages_slowpath.constprop.114 __alloc_pages alloc_migration_target migrar_pages to_node do_migrate_pages cpuset_migrate_mm_workfn process_one_work trabajador_thread kthread ret_from_fork Este error es específico de CONFIG_PREEMPT=n construye. La raíz del problema es que kcompact0 no se reprograma en una CPU mientras una tarea que ha aislado una gran cantidad de páginas de la LRU está esperando que kcompact0 se reprograme para que las páginas puedan liberarse. Mientras que Shrink_inactive_list() solo realiza un bucle alrededor de too_many_isolated, la recuperación puede continuar sin reprogramar si sc->skipped_deactivate == 1, lo que podría suceder si no hubiera ningún archivo LRU y la lista de anónimos inactivos no fuera baja.
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
References () https://git.kernel.org/stable/c/3980cff6349687f73d5109f156f23cb261c24164 - () https://git.kernel.org/stable/c/3980cff6349687f73d5109f156f23cb261c24164 - Mailing List, Patch
References () https://git.kernel.org/stable/c/b485c6f1f9f54b81443efda5f3d8a5036ba2cd91 - () https://git.kernel.org/stable/c/b485c6f1f9f54b81443efda5f3d8a5036ba2cd91 - Mailing List, Patch

16 Jul 2024, 12:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-07-16 12:15

Updated : 2024-08-21 18:04


NVD link : CVE-2022-48800

Mitre link : CVE-2022-48800

CVE.ORG link : CVE-2022-48800


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-667

Improper Locking