CVE-2021-47638

ubifs: rename_whiteout: Fix double free for whiteout_ui->data

State
Published
Severity
7.8 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: rename_whiteout: Fix double free for whiteout_ui->data

'whiteout_ui->data' will be freed twice if space budget fail for rename whiteout operation as following process:

rename_whiteout dev = kmalloc whiteout_ui->data = dev kfree(whiteout_ui->data) // Free first time iput(whiteout) ubifs_free_inode kfree(ui->data) // Double free!

KASAN reports: ================================================================== BUG: KASAN: double-free or invalid-free in ubifs_free_inode+0x4f/0x70 Call Trace: kfree+0x117/0x490 ubifs_free_inode+0x4f/0x70 [ubifs] i_callback+0x30/0x60 rcu_do_batch+0x366/0xac0 __do_softirq+0x133/0x57f

Allocated by task 1506: kmem_cache_alloc_trace+0x3c2/0x7a0 do_rename+0x9b7/0x1150 [ubifs] ubifs_rename+0x106/0x1f0 [ubifs] do_syscall_64+0x35/0x80

Freed by task 1506: kfree+0x117/0x490 do_rename.cold+0x53/0x8a [ubifs] ubifs_rename+0x106/0x1f0 [ubifs] do_syscall_64+0x35/0x80

The buggy address belongs to the object at ffff88810238bed8 which belongs to the cache kmalloc-8 of size 8 ==================================================================

Let ubifs_free_inode() free 'whiteout_ui->data'. BTW, delete unused assignment 'whiteout_ui->data_len = 0', process 'ubifs_evict_inode() -> ubifs_jnl_delete_inode() -> ubifs_jnl_write_inode()' doesn't need it (because 'inc_nlink(whiteout)' won't be excuted by 'goto out_release', and the nlink of whiteout inode is 0).

Scores

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

Weaknesses

Affected Products

ProductVersions
LinuxLinux
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before 8b3c7be16f3f4dfd6e15ac651484e59d3fa36274Affected
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before 2b3236ecf96db7af5836e1366ce39ace8ce832faAffected
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before 14276d38c89a170363e90b6ac0a53c3cf61b87fcAffected
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before a90e2dbe66d2647ff95a0442ad2e86482d977fd8Affected
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before 2ad07009c459e56ebdcc089d850d664660fdb742Affected
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before b9a937f096e608b3368c1abc920d4d640ba2c94fAffected
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before 6d7a158a7363c1f6604aa47ae1a280a5c65123ddAffected
  • 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798 to before 40a8f0d5e7b3999f096570edab71c345da812e3eAffected
LinuxLinux
  • 4.9Affected
  • before 4.9Not affected
  • 4.14.276 through 4.14.*Not 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.