Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2024-37354— btrfs: fix crash on racing fsync and size-extending write into prealloc

Quick assessment

Affected
Linux Linux
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于btrfs_set_item_key_safe函数发现重复密钥,从而导致崩溃。

CVSS 7.8 · High EPSS 0.17% · P6

Affected Version Matrix 14

VendorProduct Version RangeStatus
Linux Linux 31d11b83b96faaee4bb514d375a09489117c3e8d< c993fd02ba471e296ca1996f13626fc917120158 affected
31d11b83b96faaee4bb514d375a09489117c3e8d< 1ff2bd566fbcefcb892be85c493bdb92b911c428 affected
31d11b83b96faaee4bb514d375a09489117c3e8d< 3d08c52ba1887a1ff9c179d4b6a18b427bcb2097 affected
31d11b83b96faaee4bb514d375a09489117c3e8d< f4e5ed974876c14d3623e04dc43d3e3281bc6011 affected
31d11b83b96faaee4bb514d375a09489117c3e8d< 9d274c19a71b3a276949933859610721a453946b affected
61a9f6b7fe0ca9706b49a23cecf5f9a9c802b6ce affected
4.14.57< 4.15 affected
4.17 affected
… +6 more rows
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2024-37354

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
btrfs: fix crash on racing fsync and size-extending write into prealloc
Source: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: btrfs: fix crash on racing fsync and size-extending write into prealloc We have been seeing crashes on duplicate keys in btrfs_set_item_key_safe(): BTRFS critical (device vdb): slot 4 key (450 108 8192) new key (450 108 8192) ------------[ cut here ]------------ kernel BUG at fs/btrfs/ctree.c:2620! invalid opcode: 0000 [#1] PREEMPT SMP PTI CPU: 0 PID: 3139 Comm: xfs_io Kdump: loaded Not tainted 6.9.0 #6 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014 RIP: 0010:btrfs_set_item_key_safe+0x11f/0x290 [btrfs] With the following stack trace: #0 btrfs_set_item_key_safe (fs/btrfs/ctree.c:2620:4) #1 btrfs_drop_extents (fs/btrfs/file.c:411:4) #2 log_one_extent (fs/btrfs/tree-log.c:4732:9) #3 btrfs_log_changed_extents (fs/btrfs/tree-log.c:4955:9) #4 btrfs_log_inode (fs/btrfs/tree-log.c:6626:9) #5 btrfs_log_inode_parent (fs/btrfs/tree-log.c:7070:8) #6 btrfs_log_dentry_safe (fs/btrfs/tree-log.c:7171:8) #7 btrfs_sync_file (fs/btrfs/file.c:1933:8) #8 vfs_fsync_range (fs/sync.c:188:9) #9 vfs_fsync (fs/sync.c:202:9) #10 do_fsync (fs/sync.c:212:9) #11 __do_sys_fdatasync (fs/sync.c:225:9) #12 __se_sys_fdatasync (fs/sync.c:223:1) #13 __x64_sys_fdatasync (fs/sync.c:223:1) #14 do_syscall_x64 (arch/x86/entry/common.c:52:14) #15 do_syscall_64 (arch/x86/entry/common.c:83:7) #16 entry_SYSCALL_64+0xaf/0x14c (arch/x86/entry/entry_64.S:121) So we're logging a changed extent from fsync, which is splitting an extent in the log tree. But this split part already exists in the tree, triggering the BUG(). This is the state of the log tree at the time of the crash, dumped with drgn (https://github.com/osandov/drgn/blob/main/contrib/btrfs_tree.py) to get more details than btrfs_print_leaf() gives us: >>> print_extent_buffer(prog.crashed_thread().stack_trace()[0]["eb"]) leaf 33439744 level 0 items 72 generation 9 owner 18446744073709551610 leaf 33439744 flags 0x100000000000000 fs uuid e5bd3946-400c-4223-8923-190ef1f18677 chunk uuid d58cb17e-6d02-494a-829a-18b7d8a399da item 0 key (450 INODE_ITEM 0) itemoff 16123 itemsize 160 generation 7 transid 9 size 8192 nbytes 8473563889606862198 block group 0 mode 100600 links 1 uid 0 gid 0 rdev 0 sequence 204 flags 0x10(PREALLOC) atime 1716417703.220000000 (2024-05-22 15:41:43) ctime 1716417704.983333333 (2024-05-22 15:41:44) mtime 1716417704.983333333 (2024-05-22 15:41:44) otime 17592186044416.000000000 (559444-03-08 01:40:16) item 1 key (450 INODE_REF 256) itemoff 16110 itemsize 13 index 195 namelen 3 name: 193 item 2 key (450 XATTR_ITEM 1640047104) itemoff 16073 itemsize 37 location key (0 UNKNOWN.0 0) type XATTR transid 7 data_len 1 name_len 6 name: user.a data a item 3 key (450 EXTENT_DATA 0) itemoff 16020 itemsize 53 generation 9 type 1 (regular) extent data disk byte 303144960 nr 12288 extent data offset 0 nr 4096 ram 12288 extent compression 0 (none) item 4 key (450 EXTENT_DATA 4096) itemoff 15967 itemsize 53 generation 9 type 2 (prealloc) prealloc data disk byte 303144960 nr 12288 prealloc data offset 4096 nr 8192 item 5 key (450 EXTENT_DATA 8192) itemoff 15914 itemsize 53 generation 9 type 2 (prealloc) prealloc data disk byte 303144960 nr 12288 prealloc data offset 8192 nr 4096 ... So the real problem happened earlier: notice that items 4 (4k-12k) and 5 (8k-12k) overlap. Both are prealloc extents. Item 4 straddles i_size and item 5 starts at i_size. Here is the state of ---truncated---
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Source: CVE Program / CVE List V5
Vulnerability Type
N/A
Source: CVE Program / CVE List V5
Vulnerability Title
Linux kernel安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于btrfs_set_item_key_safe函数发现重复密钥,从而导致崩溃。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

Vendor Product Affected Versions CPE Subscribe
Linux Linux 31d11b83b96faaee4bb514d375a09489117c3e8d ~ c993fd02ba471e296ca1996f13626fc917120158 -
Linux Linux 4.17 -

II. Public POCs for CVE-2024-37354

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2024-37354

请登录查看更多情报信息。

Other References for CVE-2024-37354 (3)

Same Patch Batch · Linux · 2024-06-25 · 24 CVEs total

CVE-2024-39293 9.8 CRITICAL Revert "xsk: Support redirect to any socket bound to the same umem"
CVE-2024-39471 7.8 HIGH drm/amdgpu: add error handle to avoid out-of-bounds
CVE-2024-37078 7.8 HIGH nilfs2: fix potential kernel bug due to lack of writeback flag waiting
CVE-2024-38306 7.8 HIGH btrfs: protect folio::private when attaching extent buffer folios
CVE-2024-38385 7.8 HIGH genirq/irqdesc: Prevent use-after-free in irq_find_at_or_after()
CVE-2024-39467 7.8 HIGH f2fs: fix to do sanity check on i_xattr_nid in sanity_check_inode()
CVE-2024-39463 7.8 HIGH 9p: add missing locking around taking dentry fid list
CVE-2024-39468 7.5 HIGH smb: client: fix deadlock in smb2_find_smb_tcon()
CVE-2024-39469 7.1 HIGH nilfs2: fix nilfs_empty_dir() misjudgment and long loop on I/O errors
CVE-2024-39371 io_uring: check for non-NULL file pointer in io_file_can_poll()
CVE-2024-39470 eventfs: Fix a possible null pointer dereference in eventfs_find_events()
CVE-2024-39466 thermal/drivers/qcom/lmh: Check for SCM availability at probe
CVE-2024-39464 media: v4l: async: Fix notifier list entry init
CVE-2024-39465 media: mgb4: Fix double debugfs remove
CVE-2024-39462 clk: bcm: dvp: Assign ->num before accessing ->hws
CVE-2024-39461 clk: bcm: rpi: Assign ->num before accessing ->hws
CVE-2021-4440 x86/xen: Drop USERGS_SYSRET64 paravirt call
CVE-2024-39301 net/9p: fix uninit-value in p9_client_rpc()
CVE-2024-39298 mm/memory-failure: fix handling of dissolved but not taken off from buddy pages
CVE-2024-39296 bonding: fix oops during rmmod

Showing top 20 of 24 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2024-37354

No comments yet


Leave a comment