| 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-2024-38582: nilfs2: fix potential hang in nilfs_detach_log_writer() |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| nilfs2: fix potential hang in nilfs_detach_log_writer() |
| |
| Syzbot has reported a potential hang in nilfs_detach_log_writer() called |
| during nilfs2 unmount. |
| |
| Analysis revealed that this is because nilfs_segctor_sync(), which |
| synchronizes with the log writer thread, can be called after |
| nilfs_segctor_destroy() terminates that thread, as shown in the call trace |
| below: |
| |
| nilfs_detach_log_writer |
| nilfs_segctor_destroy |
| nilfs_segctor_kill_thread --> Shut down log writer thread |
| flush_work |
| nilfs_iput_work_func |
| nilfs_dispose_list |
| iput |
| nilfs_evict_inode |
| nilfs_transaction_commit |
| nilfs_construct_segment (if inode needs sync) |
| nilfs_segctor_sync --> Attempt to synchronize with |
| log writer thread |
| *** DEADLOCK *** |
| |
| Fix this issue by changing nilfs_segctor_sync() so that the log writer |
| thread returns normally without synchronizing after it terminates, and by |
| forcing tasks that are already waiting to complete once after the thread |
| terminates. |
| |
| The skipped inode metadata flushout will then be processed together in the |
| subsequent cleanup work in nilfs_segctor_destroy(). |
| |
| The Linux kernel CVE team has assigned CVE-2024-38582 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Fixed in 4.19.316 with commit 911d38be151921a5d152bb55e81fd752384c6830 |
| Fixed in 5.4.278 with commit bc9cee50a4a4ca23bdc49f75ea8242d8a2193b3b |
| Fixed in 5.10.219 with commit eff7cdf890b02596b8d73e910bdbdd489175dbdb |
| Fixed in 5.15.161 with commit 06afce714d87c7cd1dcfccbcd800c5c5d2cf1cfd |
| Fixed in 6.1.93 with commit 1c3844c5f4eac043954ebf6403fa9fd1f0e9c1c0 |
| Fixed in 6.6.33 with commit a8799662fed1f8747edae87a1937549288baca6a |
| Fixed in 6.8.12 with commit 6e5c8e8e024e147b834f56f2115aad241433679b |
| Fixed in 6.9.3 with commit c516db6ab9eabbedbc430b4f93b0d8728e9b427f |
| Fixed in 6.10 with commit eb85dace897c5986bc2f36b3c783c6abb8a4292e |
| |
| 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-2024-38582 |
| 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: |
| fs/nilfs2/segment.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/911d38be151921a5d152bb55e81fd752384c6830 |
| https://git.kernel.org/stable/c/bc9cee50a4a4ca23bdc49f75ea8242d8a2193b3b |
| https://git.kernel.org/stable/c/eff7cdf890b02596b8d73e910bdbdd489175dbdb |
| https://git.kernel.org/stable/c/06afce714d87c7cd1dcfccbcd800c5c5d2cf1cfd |
| https://git.kernel.org/stable/c/1c3844c5f4eac043954ebf6403fa9fd1f0e9c1c0 |
| https://git.kernel.org/stable/c/a8799662fed1f8747edae87a1937549288baca6a |
| https://git.kernel.org/stable/c/6e5c8e8e024e147b834f56f2115aad241433679b |
| https://git.kernel.org/stable/c/c516db6ab9eabbedbc430b4f93b0d8728e9b427f |
| https://git.kernel.org/stable/c/eb85dace897c5986bc2f36b3c783c6abb8a4292e |