CVE-2024-26956

nilfs2: fix failure to detect DAT corruption in btree and direct mappings

Medium · published May 1, 2024

CVSS v3.1
5.5
EPSS
0%
Percentile
16.2
In the wild
Unconfirmed
What it is

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

nilfs2: fix failure to detect DAT corruption in btree and direct mappings

Patch series "nilfs2: fix kernel bug at submit_bh_wbc()".

This resolves a kernel BUG reported by syzbot. Since there are two

flaws involved, I've made each one a separate patch.

The first patch alone resolves the syzbot-reported bug, but I think

both fixes should be sent to stable, so I've tagged them as such.

This patch (of 2):

Syzbot has reported a kernel bug in submit_bh_wbc() when writing file data

to a nilfs2 file system whose metadata is corrupted.

There are two flaws involved in this issue.

The first flaw is that when nilfs_get_block() locates a data block using

btree or direct mapping, if the disk address translation routine

nilfs_dat_translate() fails with internal code -ENOENT due to DAT metadata

corruption, it can be passed back to nilfs_get_block(). This causes

nilfs_get_block() to misidentify an existing block as non-existent,

causing both data block lookup and insertion to fail inconsistently.

The second flaw is that nilfs_get_block() returns a successful status in

this inconsistent state. This causes the caller __block_write_begin_int()

or others to request a read even though the buffer is not mapped,

resulting in a BUG_ON check for the BH_Mapped flag in submit_bh_wbc()

failing.

This fixes the first issue by changing the return value to code -EINVAL

when a conversion using DAT fails with code -ENOENT, avoiding the

conflicting condition that leads to the kernel bug described above. Here,

code -EINVAL indicates that metadata corruption was detected during the

block lookup, which will be properly handled as a file system error and

converted to -EIO when passing through the nilfs2 bmap layer.

The record
Technical detail
CVSS v3.1
5.5 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00255 · 16.2th percentile
Published
2024-05-01T05:18Z
EPSS history
Timeline
  • 01 MAY 05:18Z
    nilfs2: fix failure to detect DAT corruption in btree and direct mappings
    cvelistv5