CVE-2023-54224

Source
https://cve.org/CVERecord?id=CVE-2023-54224
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2023-54224.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2023-54224
Downstream
Published
2025-12-30T12:11:18.076Z
Modified
2026-03-10T21:52:43.173046Z
Summary
btrfs: fix lockdep splat and potential deadlock after failure running delayed items
Details

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

btrfs: fix lockdep splat and potential deadlock after failure running delayed items

When running delayed items we are holding a delayed node's mutex and then we will attempt to modify a subvolume btree to insert/update/delete the delayed items. However if have an error during the insertions for example, btrfsinsertdelayed_items() may return with a path that has locked extent buffers (a leaf at the very least), and then we attempt to release the delayed node at _btrfsrundelayeditems(), which requires taking the delayed node's mutex, causing an ABBA type of deadlock. This was reported by syzbot and the lockdep splat is the following:

WARNING: possible circular locking dependency detected 6.5.0-rc7-syzkaller-00024-g93f5de5f648d #0 Not tainted


syz-executor.2/13257 is trying to acquire lock: ffff88801835c0c0 (&delayed_node->mutex){+.+.}-{3:3}, at: _btrfsreleasedelayednode+0x9a/0xaa0 fs/btrfs/delayed-inode.c:256

but task is already holding lock: ffff88802a5ab8e8 (btrfs-tree-00){++++}-{3:3}, at: __btrfstreelock+0x3c/0x2a0 fs/btrfs/locking.c:198

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-> #1 (btrfs-tree-00){++++}-{3:3}: __lockrelease kernel/locking/lockdep.c:5475 [inline] lockrelease+0x36f/0x9d0 kernel/locking/lockdep.c:5781 up_write+0x79/0x580 kernel/locking/rwsem.c:1625 btrfstreeunlockrw fs/btrfs/locking.h:189 [inline] btrfsunlockupsafe+0x179/0x3b0 fs/btrfs/locking.c:239 searchleaf fs/btrfs/ctree.c:1986 [inline] btrfssearchslot+0x2511/0x2f80 fs/btrfs/ctree.c:2230 btrfsinsertemptyitems+0x9c/0x180 fs/btrfs/ctree.c:4376 btrfsinsertdelayeditem fs/btrfs/delayed-inode.c:746 [inline] btrfsinsertdelayeditems fs/btrfs/delayed-inode.c:824 [inline] __btrfscommitinodedelayeditems+0xd24/0x2410 fs/btrfs/delayed-inode.c:1111 _btrfsrundelayeditems+0x1db/0x430 fs/btrfs/delayed-inode.c:1153 flushspace+0x269/0xe70 fs/btrfs/space-info.c:723 btrfsasyncreclaimmetadataspace+0x106/0x350 fs/btrfs/space-info.c:1078 processonework+0x92c/0x12c0 kernel/workqueue.c:2600 workerthread+0xa63/0x1210 kernel/workqueue.c:2751 kthread+0x2b8/0x350 kernel/kthread.c:389 retfromfork+0x2e/0x60 arch/x86/kernel/process.c:145 retfromforkasm+0x11/0x20 arch/x86/entry/entry64.S:304

-> #0 (&delayednode->mutex){+.+.}-{3:3}: checkprevadd kernel/locking/lockdep.c:3142 [inline] checkprevsadd kernel/locking/lockdep.c:3261 [inline] validatechain kernel/locking/lockdep.c:3876 [inline] __lockacquire+0x39ff/0x7f70 kernel/locking/lockdep.c:5144 lockacquire+0x1e3/0x520 kernel/locking/lockdep.c:5761 __mutexlockcommon+0x1d8/0x2530 kernel/locking/mutex.c:603 __mutexlock kernel/locking/mutex.c:747 [inline] mutexlock_nested+0x1b/0x20 kernel/locking/mutex.c:799 __btrfsreleasedelayednode+0x9a/0xaa0 fs/btrfs/delayed-inode.c:256 btrfsreleasedelayednode fs/btrfs/delayed-inode.c:281 [inline] __btrfsrundelayeditems+0x2b5/0x430 fs/btrfs/delayed-inode.c:1156 btrfscommittransaction+0x859/0x2ff0 fs/btrfs/transaction.c:2276 btrfssyncfile+0xf56/0x1330 fs/btrfs/file.c:1988 vfsfsyncrange fs/sync.c:188 [inline] vfsfsync fs/sync.c:202 [inline] do_fsync fs/sync.c:212 [inline] __dosysfsync fs/sync.c:220 [inline] __sesysfsync fs/sync.c:218 [inline] __x64sysfsync+0x196/0x1e0 fs/sync.c:218 dosyscallx64 arch/x86/entry/common.c:50 [inline] dosyscall64+0x41/0xc0 arch/x86/entry/common.c:80 entrySYSCALL64afterhwframe+0x63/0xcd

other info that ---truncated---

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/54xxx/CVE-2023-54224.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
506650dcb3a716ad98681f7091ba2f8e748c04b8
Fixed
779c3cf2749c7a7bad6f839cb2954a25ba92f4d6
Fixed
32247b9526bfdaeef85f7339d9b4f913c7370f92
Fixed
36d918da3f1bf749178c7daf471a3be1730ed3ca
Fixed
e110f8911ddb93e6f55da14ccbbe705397b30d0b

Affected versions

v5.*
v5.14
v5.15
v5.15-rc1
v5.15-rc2
v5.15-rc3
v5.15-rc4
v5.15-rc5
v5.15-rc6
v5.15-rc7
v5.15.1
v5.15.10
v5.15.100
v5.15.101
v5.15.102
v5.15.103
v5.15.104
v5.15.105
v5.15.106
v5.15.107
v5.15.108
v5.15.109
v5.15.11
v5.15.110
v5.15.111
v5.15.112
v5.15.113
v5.15.114
v5.15.115
v5.15.116
v5.15.117
v5.15.118
v5.15.119
v5.15.12
v5.15.120
v5.15.121
v5.15.122
v5.15.123
v5.15.124
v5.15.125
v5.15.126
v5.15.127
v5.15.128
v5.15.129
v5.15.13
v5.15.130
v5.15.131
v5.15.132
v5.15.14
v5.15.15
v5.15.16
v5.15.17
v5.15.18
v5.15.19
v5.15.2
v5.15.20
v5.15.21
v5.15.22
v5.15.23
v5.15.24
v5.15.25
v5.15.26
v5.15.27
v5.15.28
v5.15.29
v5.15.3
v5.15.30
v5.15.31
v5.15.32
v5.15.33
v5.15.34
v5.15.35
v5.15.36
v5.15.37
v5.15.38
v5.15.39
v5.15.4
v5.15.40
v5.15.41
v5.15.42
v5.15.43
v5.15.44
v5.15.45
v5.15.46
v5.15.47
v5.15.48
v5.15.49
v5.15.5
v5.15.50
v5.15.51
v5.15.52
v5.15.53
v5.15.54
v5.15.55
v5.15.56
v5.15.57
v5.15.58
v5.15.59
v5.15.6
v5.15.60
v5.15.61
v5.15.62
v5.15.63
v5.15.64
v5.15.65
v5.15.66
v5.15.67
v5.15.68
v5.15.69
v5.15.7
v5.15.70
v5.15.71
v5.15.72
v5.15.73
v5.15.74
v5.15.75
v5.15.76
v5.15.77
v5.15.78
v5.15.79
v5.15.8
v5.15.80
v5.15.81
v5.15.82
v5.15.83
v5.15.84
v5.15.85
v5.15.86
v5.15.87
v5.15.88
v5.15.89
v5.15.9
v5.15.90
v5.15.91
v5.15.92
v5.15.93
v5.15.94
v5.15.95
v5.15.96
v5.15.97
v5.15.98
v5.15.99
v5.16
v5.16-rc1
v5.16-rc2
v5.16-rc3
v5.16-rc4
v5.16-rc5
v5.16-rc6
v5.16-rc7
v5.16-rc8
v5.17
v5.17-rc1
v5.17-rc2
v5.17-rc3
v5.17-rc4
v5.17-rc5
v5.17-rc6
v5.17-rc7
v5.17-rc8
v5.18
v5.18-rc1
v5.18-rc2
v5.18-rc3
v5.18-rc4
v5.18-rc5
v5.18-rc6
v5.18-rc7
v5.19
v5.19-rc1
v5.19-rc2
v5.19-rc3
v5.19-rc4
v5.19-rc5
v5.19-rc6
v5.19-rc7
v5.19-rc8
v6.*
v6.0
v6.0-rc1
v6.0-rc2
v6.0-rc3
v6.0-rc4
v6.0-rc5
v6.0-rc6
v6.0-rc7
v6.1
v6.1-rc1
v6.1-rc2
v6.1-rc3
v6.1-rc4
v6.1-rc5
v6.1-rc6
v6.1-rc7
v6.1-rc8
v6.1.1
v6.1.10
v6.1.11
v6.1.12
v6.1.13
v6.1.14
v6.1.15
v6.1.16
v6.1.17
v6.1.18
v6.1.19
v6.1.2
v6.1.20
v6.1.21
v6.1.22
v6.1.23
v6.1.24
v6.1.25
v6.1.26
v6.1.27
v6.1.28
v6.1.29
v6.1.3
v6.1.30
v6.1.31
v6.1.32
v6.1.33
v6.1.34
v6.1.35
v6.1.36
v6.1.37
v6.1.38
v6.1.39
v6.1.4
v6.1.40
v6.1.41
v6.1.42
v6.1.43
v6.1.44
v6.1.45
v6.1.46
v6.1.47
v6.1.48
v6.1.49
v6.1.5
v6.1.50
v6.1.51
v6.1.52
v6.1.53
v6.1.54
v6.1.6
v6.1.7
v6.1.8
v6.1.9
v6.2
v6.2-rc1
v6.2-rc2
v6.2-rc3
v6.2-rc4
v6.2-rc5
v6.2-rc6
v6.2-rc7
v6.2-rc8
v6.3
v6.3-rc1
v6.3-rc2
v6.3-rc3
v6.3-rc4
v6.3-rc5
v6.3-rc6
v6.3-rc7
v6.4
v6.4-rc1
v6.4-rc2
v6.4-rc3
v6.4-rc4
v6.4-rc5
v6.4-rc6
v6.4-rc7
v6.5
v6.5-rc1
v6.5-rc2
v6.5-rc3
v6.5-rc4
v6.5-rc5
v6.5-rc6
v6.5-rc7
v6.5.1
v6.5.2
v6.5.3
v6.5.4

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2023-54224.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
5.15.0
Fixed
5.15.133
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.55
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.5.5

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2023-54224.json"