CVE-2021-47636

ubifs: Fix read out-of-bounds in ubifs_wbuf_write_nolock()

State
Published
Severity
7.1 High
Published
Feb 26, 2025
Updated
Aug 5, 2026
Reserved
Feb 26, 2025

Read the record on cve.org

Description

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

ubifs: Fix read out-of-bounds in ubifs_wbuf_write_nolock()

Function ubifs_wbuf_write_nolock() may access buf out of bounds in following process:

ubifs_wbuf_write_nolock(): aligned_len = ALIGN(len, 8); // Assume len = 4089, aligned_len = 4096 if (aligned_len <= wbuf->avail) ... // Not satisfy if (wbuf->used) { ubifs_leb_write() // Fill some data in avail wbuf len -= wbuf->avail; // len is still not 8-bytes aligned aligned_len -= wbuf->avail; } n = aligned_len >> c->max_write_shift; if (n) { n <<= c->max_write_shift; err = ubifs_leb_write(c, wbuf->lnum, buf + written, wbuf->offs, n); // n > len, read out of bounds less than 8(n-len) bytes }

, which can be catched by KASAN: ========================================================= BUG: KASAN: slab-out-of-bounds in ecc_sw_hamming_calculate+0x1dc/0x7d0 Read of size 4 at addr ffff888105594ff8 by task kworker/u8:4/128 Workqueue: writeback wb_workfn (flush-ubifs_0_0) Call Trace: kasan_report.cold+0x81/0x165 nand_write_page_swecc+0xa9/0x160 ubifs_leb_write+0xf2/0x1b0 [ubifs] ubifs_wbuf_write_nolock+0x421/0x12c0 [ubifs] write_head+0xdc/0x1c0 [ubifs] ubifs_jnl_write_inode+0x627/0x960 [ubifs] wb_workfn+0x8af/0xb80

Function ubifs_wbuf_write_nolock() accepts that parameter 'len' is not 8 bytes aligned, the 'len' represents the true length of buf (which is allocated in 'ubifs_jnl_xxx', eg. ubifs_jnl_write_inode), so ubifs_wbuf_write_nolock() must handle the length read from 'buf' carefully to write leb safely.

Fetch a reproducer in [Link].

Scores

CVSSScoreVectorSource
3.17.1 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:HLinux
3.17.1 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:HCISA-ADP

Weaknesses

Affected Products

ProductVersions
LinuxLinux
  • 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d to before 5343575aa11c5d7044107d59d43f84aec01312b0Affected
  • 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d to before b80ccbec0e4804436c382d7dd60e943c386ed83aAffected
  • 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d to before 07a209fadee7b53b46858538e1177597273862e4Affected
  • 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d to before a7054aaf1909cf40489c0ec1b728fdcf79c751a6Affected
  • 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d to before e09fa5318d51f522e1af4fbaf8f74999355980c8Affected
  • 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d to before 3b7fb89135a20587d57f8877c02e25003e9edbdfAffected
  • 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d to before 4f2262a334641e05f645364d5ade1f565c85f20bAffected
LinuxLinux
  • 2.6.27Affected
  • before 2.6.27Not affected
  • 4.19.238 through 4.19.*Not affected
  • 5.4.189 through 5.4.*Not affected
  • 5.10.110 through 5.10.*Not affected
  • 5.15.33 through 5.15.*Not affected
  • 5.16.19 through 5.16.*Not affected
  • 5.17.2 through 5.17.*Not affected
  • 5.18 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.