| From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2022-48800: mm: vmscan: remove deadlock due to throttling failing to make progress |
| |
| Description |
| =========== |
| |
| 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. |
| |
| The Linux kernel CVE team has assigned CVE-2022-48800 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.16 with commit d818fca1cac31b1fc9301bda83e195a46fb4ebaa and fixed in 5.16.10 with commit 3980cff6349687f73d5109f156f23cb261c24164 |
| Issue introduced in 5.16 with commit d818fca1cac31b1fc9301bda83e195a46fb4ebaa and fixed in 5.17 with commit b485c6f1f9f54b81443efda5f3d8a5036ba2cd91 |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2022-48800 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| mm/vmscan.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/3980cff6349687f73d5109f156f23cb261c24164 |
| https://git.kernel.org/stable/c/b485c6f1f9f54b81443efda5f3d8a5036ba2cd91 |