CVE-2024-47669

CVE-2024-47669

High · published October 9, 2024

CVSS v3.1
7.3
EPSS
0%
Percentile
11.3
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

nilfs2: fix state management in error path of log writing function

After commit a694291a6211 ("nilfs2: separate wait function from

nilfs_segctor_write") was applied, the log writing function

nilfs_segctor_do_construct() was able to issue I/O requests continuously

even if user data blocks were split into multiple logs across segments,

but two potential flaws were introduced in its error handling.

First, if nilfs_segctor_begin_construction() fails while creating the

second or subsequent logs, the log writing function returns without

calling nilfs_segctor_abort_construction(), so the writeback flag set on

pages/folios will remain uncleared. This causes page cache operations to

hang waiting for the writeback flag. For example,

truncate_inode_pages_final(), which is called via nilfs_evict_inode() when

an inode is evicted from memory, will hang.

Second, the NILFS_I_COLLECTED flag set on normal inodes remain uncleared.

As a result, if the next log write involves checkpoint creation, that's

fine, but if a partial log write is performed that does not, inodes with

NILFS_I_COLLECTED set are erroneously removed from the "sc_dirty_files"

list, and their data and b-tree blocks may not be written to the device,

corrupting the block mapping.

Fix these issues by uniformly calling nilfs_segctor_abort_construction()

on failure of each step in the loop in nilfs_segctor_do_construct(),

having it clean up logs and segment usages according to progress, and

correcting the conditions for calling nilfs_redirty_inodes() to ensure

that the NILFS_I_COLLECTED flag is cleared.

The record
Technical detail
CVSS v3.1
7.3 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00215 · 11.3th percentile
Published
2024-10-09T19:15Z
Affected products (13)
ProductVersionsFixed in
linux/linux_kernel≥ 2.6.33, < 4.19.3224.19.322
linux/linux_kernel≥ 4.20, < 5.4.2845.4.284
linux/linux_kernel≥ 5.5, < 5.10.2265.10.226
linux/linux_kernel≥ 5.11, < 5.15.1675.15.167
linux/linux_kernel≥ 5.16, < 6.1.1106.1.110
linux/linux_kernel≥ 6.2, < 6.6.516.6.51
linux/linux_kernel≥ 6.7, < 6.10.106.10.10
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (9)
EPSS history
Timeline
  • 09 OCT 14:14Z
    nilfs2: fix state management in error path of log writing function
    cvelistv5