Vulnerability Details CVE-2021-46987
In the Linux kernel, the following vulnerability has been resolved:
btrfs: fix deadlock when cloning inline extents and using qgroups
There are a few exceptional cases where cloning an inline extent needs to
copy the inline extent data into a page of the destination inode.
When this happens, we end up starting a transaction while having a dirty
page for the destination inode and while having the range locked in the
destination's inode iotree too. Because when reserving metadata space
for a transaction we may need to flush existing delalloc in case there is
not enough free space, we have a mechanism in place to prevent a deadlock,
which was introduced in commit 3d45f221ce627d ("btrfs: fix deadlock when
cloning inline extent and low on free metadata space").
However when using qgroups, a transaction also reserves metadata qgroup
space, which can also result in flushing delalloc in case there is not
enough available space at the moment. When this happens we deadlock, since
flushing delalloc requires locking the file range in the inode's iotree
and the range was already locked at the very beginning of the clone
operation, before attempting to start the transaction.
When this issue happens, stack traces like the following are reported:
[72747.556262] task:kworker/u81:9 state:D stack: 0 pid: 225 ppid: 2 flags:0x00004000
[72747.556268] Workqueue: writeback wb_workfn (flush-btrfs-1142)
[72747.556271] Call Trace:
[72747.556273] __schedule+0x296/0x760
[72747.556277] schedule+0x3c/0xa0
[72747.556279] io_schedule+0x12/0x40
[72747.556284] __lock_page+0x13c/0x280
[72747.556287] ? generic_file_readonly_mmap+0x70/0x70
[72747.556325] extent_write_cache_pages+0x22a/0x440 [btrfs]
[72747.556331] ? __set_page_dirty_nobuffers+0xe7/0x160
[72747.556358] ? set_extent_buffer_dirty+0x5e/0x80 [btrfs]
[72747.556362] ? update_group_capacity+0x25/0x210
[72747.556366] ? cpumask_next_and+0x1a/0x20
[72747.556391] extent_writepages+0x44/0xa0 [btrfs]
[72747.556394] do_writepages+0x41/0xd0
[72747.556398] __writeback_single_inode+0x39/0x2a0
[72747.556403] writeback_sb_inodes+0x1ea/0x440
[72747.556407] __writeback_inodes_wb+0x5f/0xc0
[72747.556410] wb_writeback+0x235/0x2b0
[72747.556414] ? get_nr_inodes+0x35/0x50
[72747.556417] wb_workfn+0x354/0x490
[72747.556420] ? newidle_balance+0x2c5/0x3e0
[72747.556424] process_one_work+0x1aa/0x340
[72747.556426] worker_thread+0x30/0x390
[72747.556429] ? create_worker+0x1a0/0x1a0
[72747.556432] kthread+0x116/0x130
[72747.556435] ? kthread_park+0x80/0x80
[72747.556438] ret_from_fork+0x1f/0x30
[72747.566958] Workqueue: btrfs-flush_delalloc btrfs_work_helper [btrfs]
[72747.566961] Call Trace:
[72747.566964] __schedule+0x296/0x760
[72747.566968] ? finish_wait+0x80/0x80
[72747.566970] schedule+0x3c/0xa0
[72747.566995] wait_extent_bit.constprop.68+0x13b/0x1c0 [btrfs]
[72747.566999] ? finish_wait+0x80/0x80
[72747.567024] lock_extent_bits+0x37/0x90 [btrfs]
[72747.567047] btrfs_invalidatepage+0x299/0x2c0 [btrfs]
[72747.567051] ? find_get_pages_range_tag+0x2cd/0x380
[72747.567076] __extent_writepage+0x203/0x320 [btrfs]
[72747.567102] extent_write_cache_pages+0x2bb/0x440 [btrfs]
[72747.567106] ? update_load_avg+0x7e/0x5f0
[72747.567109] ? enqueue_entity+0xf4/0x6f0
[72747.567134] extent_writepages+0x44/0xa0 [btrfs]
[72747.567137] ? enqueue_task_fair+0x93/0x6f0
[72747.567140] do_writepages+0x41/0xd0
[72747.567144] __filemap_fdatawrite_range+0xc7/0x100
[72747.567167] btrfs_run_delalloc_work+0x17/0x40 [btrfs]
[72747.567195] btrfs_work_helper+0xc2/0x300 [btrfs]
[72747.567200] process_one_work+0x1aa/0x340
[72747.567202] worker_thread+0x30/0x390
[72747.567205] ? create_worker+0x1a0/0x1a0
[72747.567208] kthread+0x116/0x130
[72747.567211] ? kthread_park+0x80/0x80
[72747.567214] ret_from_fork+0x1f/0x30
[72747.569686] task:fsstress state:D stack:
---truncated---
Exploit prediction scoring system (EPSS) score
EPSS Score 0.0
EPSS Ranking 2.1%
CVSS Severity
CVSS v3 Score 5.5
Products affected by CVE-2021-46987
-
cpe:2.3:o:linux:linux_kernel:5.10
-
cpe:2.3:o:linux:linux_kernel:5.10.0
-
cpe:2.3:o:linux:linux_kernel:5.10.1
-
cpe:2.3:o:linux:linux_kernel:5.10.10
-
cpe:2.3:o:linux:linux_kernel:5.10.100
-
cpe:2.3:o:linux:linux_kernel:5.10.101
-
cpe:2.3:o:linux:linux_kernel:5.10.102
-
cpe:2.3:o:linux:linux_kernel:5.10.103
-
cpe:2.3:o:linux:linux_kernel:5.10.104
-
cpe:2.3:o:linux:linux_kernel:5.10.105
-
cpe:2.3:o:linux:linux_kernel:5.10.106
-
cpe:2.3:o:linux:linux_kernel:5.10.107
-
cpe:2.3:o:linux:linux_kernel:5.10.108
-
cpe:2.3:o:linux:linux_kernel:5.10.109
-
cpe:2.3:o:linux:linux_kernel:5.10.11
-
cpe:2.3:o:linux:linux_kernel:5.10.110
-
cpe:2.3:o:linux:linux_kernel:5.10.111
-
cpe:2.3:o:linux:linux_kernel:5.10.112
-
cpe:2.3:o:linux:linux_kernel:5.10.113
-
cpe:2.3:o:linux:linux_kernel:5.10.114
-
cpe:2.3:o:linux:linux_kernel:5.10.115
-
cpe:2.3:o:linux:linux_kernel:5.10.116
-
cpe:2.3:o:linux:linux_kernel:5.10.117
-
cpe:2.3:o:linux:linux_kernel:5.10.118
-
cpe:2.3:o:linux:linux_kernel:5.10.119
-
cpe:2.3:o:linux:linux_kernel:5.10.12
-
cpe:2.3:o:linux:linux_kernel:5.10.120
-
cpe:2.3:o:linux:linux_kernel:5.10.121
-
cpe:2.3:o:linux:linux_kernel:5.10.122
-
cpe:2.3:o:linux:linux_kernel:5.10.123
-
cpe:2.3:o:linux:linux_kernel:5.10.124
-
cpe:2.3:o:linux:linux_kernel:5.10.125
-
cpe:2.3:o:linux:linux_kernel:5.10.126
-
cpe:2.3:o:linux:linux_kernel:5.10.127
-
cpe:2.3:o:linux:linux_kernel:5.10.128
-
cpe:2.3:o:linux:linux_kernel:5.10.129
-
cpe:2.3:o:linux:linux_kernel:5.10.13
-
cpe:2.3:o:linux:linux_kernel:5.10.130
-
cpe:2.3:o:linux:linux_kernel:5.10.131
-
cpe:2.3:o:linux:linux_kernel:5.10.132
-
cpe:2.3:o:linux:linux_kernel:5.10.133
-
cpe:2.3:o:linux:linux_kernel:5.10.134
-
cpe:2.3:o:linux:linux_kernel:5.10.135
-
cpe:2.3:o:linux:linux_kernel:5.10.136
-
cpe:2.3:o:linux:linux_kernel:5.10.137
-
cpe:2.3:o:linux:linux_kernel:5.10.138
-
cpe:2.3:o:linux:linux_kernel:5.10.139
-
cpe:2.3:o:linux:linux_kernel:5.10.14
-
cpe:2.3:o:linux:linux_kernel:5.10.140
-
cpe:2.3:o:linux:linux_kernel:5.10.141
-
cpe:2.3:o:linux:linux_kernel:5.10.142
-
cpe:2.3:o:linux:linux_kernel:5.10.143
-
cpe:2.3:o:linux:linux_kernel:5.10.144
-
cpe:2.3:o:linux:linux_kernel:5.10.145
-
cpe:2.3:o:linux:linux_kernel:5.10.146
-
cpe:2.3:o:linux:linux_kernel:5.10.147
-
cpe:2.3:o:linux:linux_kernel:5.10.148
-
cpe:2.3:o:linux:linux_kernel:5.10.149
-
cpe:2.3:o:linux:linux_kernel:5.10.15
-
cpe:2.3:o:linux:linux_kernel:5.10.150
-
cpe:2.3:o:linux:linux_kernel:5.10.151
-
cpe:2.3:o:linux:linux_kernel:5.10.152
-
cpe:2.3:o:linux:linux_kernel:5.10.153
-
cpe:2.3:o:linux:linux_kernel:5.10.154
-
cpe:2.3:o:linux:linux_kernel:5.10.155
-
cpe:2.3:o:linux:linux_kernel:5.10.156
-
cpe:2.3:o:linux:linux_kernel:5.10.157
-
cpe:2.3:o:linux:linux_kernel:5.10.158
-
cpe:2.3:o:linux:linux_kernel:5.10.159
-
cpe:2.3:o:linux:linux_kernel:5.10.16
-
cpe:2.3:o:linux:linux_kernel:5.10.160
-
cpe:2.3:o:linux:linux_kernel:5.10.161
-
cpe:2.3:o:linux:linux_kernel:5.10.162
-
cpe:2.3:o:linux:linux_kernel:5.10.163
-
cpe:2.3:o:linux:linux_kernel:5.10.164
-
cpe:2.3:o:linux:linux_kernel:5.10.165
-
cpe:2.3:o:linux:linux_kernel:5.10.166
-
cpe:2.3:o:linux:linux_kernel:5.10.167
-
cpe:2.3:o:linux:linux_kernel:5.10.168
-
cpe:2.3:o:linux:linux_kernel:5.10.169
-
cpe:2.3:o:linux:linux_kernel:5.10.17
-
cpe:2.3:o:linux:linux_kernel:5.10.170
-
cpe:2.3:o:linux:linux_kernel:5.10.171
-
cpe:2.3:o:linux:linux_kernel:5.10.172
-
cpe:2.3:o:linux:linux_kernel:5.10.173
-
cpe:2.3:o:linux:linux_kernel:5.10.174
-
cpe:2.3:o:linux:linux_kernel:5.10.175
-
cpe:2.3:o:linux:linux_kernel:5.10.176
-
cpe:2.3:o:linux:linux_kernel:5.10.177
-
cpe:2.3:o:linux:linux_kernel:5.10.178
-
cpe:2.3:o:linux:linux_kernel:5.10.179
-
cpe:2.3:o:linux:linux_kernel:5.10.18
-
cpe:2.3:o:linux:linux_kernel:5.10.180
-
cpe:2.3:o:linux:linux_kernel:5.10.181
-
cpe:2.3:o:linux:linux_kernel:5.10.182
-
cpe:2.3:o:linux:linux_kernel:5.10.183
-
cpe:2.3:o:linux:linux_kernel:5.10.184
-
cpe:2.3:o:linux:linux_kernel:5.10.185
-
cpe:2.3:o:linux:linux_kernel:5.10.186
-
cpe:2.3:o:linux:linux_kernel:5.10.187
-
cpe:2.3:o:linux:linux_kernel:5.10.188
-
cpe:2.3:o:linux:linux_kernel:5.10.189
-
cpe:2.3:o:linux:linux_kernel:5.10.19
-
cpe:2.3:o:linux:linux_kernel:5.10.190
-
cpe:2.3:o:linux:linux_kernel:5.10.191
-
cpe:2.3:o:linux:linux_kernel:5.10.192
-
cpe:2.3:o:linux:linux_kernel:5.10.193
-
cpe:2.3:o:linux:linux_kernel:5.10.194
-
cpe:2.3:o:linux:linux_kernel:5.10.195
-
cpe:2.3:o:linux:linux_kernel:5.10.196
-
cpe:2.3:o:linux:linux_kernel:5.10.197
-
cpe:2.3:o:linux:linux_kernel:5.10.198
-
cpe:2.3:o:linux:linux_kernel:5.10.199
-
cpe:2.3:o:linux:linux_kernel:5.10.2
-
cpe:2.3:o:linux:linux_kernel:5.10.20
-
cpe:2.3:o:linux:linux_kernel:5.10.200
-
cpe:2.3:o:linux:linux_kernel:5.10.201
-
cpe:2.3:o:linux:linux_kernel:5.10.202
-
cpe:2.3:o:linux:linux_kernel:5.10.203
-
cpe:2.3:o:linux:linux_kernel:5.10.204
-
cpe:2.3:o:linux:linux_kernel:5.10.205
-
cpe:2.3:o:linux:linux_kernel:5.10.206
-
cpe:2.3:o:linux:linux_kernel:5.10.207
-
cpe:2.3:o:linux:linux_kernel:5.10.208
-
cpe:2.3:o:linux:linux_kernel:5.10.209
-
cpe:2.3:o:linux:linux_kernel:5.10.21
-
cpe:2.3:o:linux:linux_kernel:5.10.210
-
cpe:2.3:o:linux:linux_kernel:5.10.211
-
cpe:2.3:o:linux:linux_kernel:5.10.212
-
cpe:2.3:o:linux:linux_kernel:5.10.213
-
cpe:2.3:o:linux:linux_kernel:5.10.214
-
cpe:2.3:o:linux:linux_kernel:5.10.215
-
cpe:2.3:o:linux:linux_kernel:5.10.216
-
cpe:2.3:o:linux:linux_kernel:5.10.217
-
cpe:2.3:o:linux:linux_kernel:5.10.218
-
cpe:2.3:o:linux:linux_kernel:5.10.219
-
cpe:2.3:o:linux:linux_kernel:5.10.22
-
cpe:2.3:o:linux:linux_kernel:5.10.220
-
cpe:2.3:o:linux:linux_kernel:5.10.221
-
cpe:2.3:o:linux:linux_kernel:5.10.222
-
cpe:2.3:o:linux:linux_kernel:5.10.223
-
cpe:2.3:o:linux:linux_kernel:5.10.224
-
cpe:2.3:o:linux:linux_kernel:5.10.225
-
cpe:2.3:o:linux:linux_kernel:5.10.226
-
cpe:2.3:o:linux:linux_kernel:5.10.227
-
cpe:2.3:o:linux:linux_kernel:5.10.228
-
cpe:2.3:o:linux:linux_kernel:5.10.229
-
cpe:2.3:o:linux:linux_kernel:5.10.23
-
cpe:2.3:o:linux:linux_kernel:5.10.230
-
cpe:2.3:o:linux:linux_kernel:5.10.231
-
cpe:2.3:o:linux:linux_kernel:5.10.232
-
cpe:2.3:o:linux:linux_kernel:5.10.233
-
cpe:2.3:o:linux:linux_kernel:5.10.234
-
cpe:2.3:o:linux:linux_kernel:5.10.235
-
cpe:2.3:o:linux:linux_kernel:5.10.236
-
cpe:2.3:o:linux:linux_kernel:5.10.237
-
cpe:2.3:o:linux:linux_kernel:5.10.238
-
cpe:2.3:o:linux:linux_kernel:5.10.239
-
cpe:2.3:o:linux:linux_kernel:5.10.24
-
cpe:2.3:o:linux:linux_kernel:5.10.240
-
cpe:2.3:o:linux:linux_kernel:5.10.241
-
cpe:2.3:o:linux:linux_kernel:5.10.242
-
cpe:2.3:o:linux:linux_kernel:5.10.244
-
cpe:2.3:o:linux:linux_kernel:5.10.25
-
cpe:2.3:o:linux:linux_kernel:5.10.26
-
cpe:2.3:o:linux:linux_kernel:5.10.27
-
cpe:2.3:o:linux:linux_kernel:5.10.28
-
cpe:2.3:o:linux:linux_kernel:5.10.29
-
cpe:2.3:o:linux:linux_kernel:5.10.3
-
cpe:2.3:o:linux:linux_kernel:5.10.30
-
cpe:2.3:o:linux:linux_kernel:5.10.31
-
cpe:2.3:o:linux:linux_kernel:5.10.32
-
cpe:2.3:o:linux:linux_kernel:5.10.33
-
cpe:2.3:o:linux:linux_kernel:5.10.34
-
cpe:2.3:o:linux:linux_kernel:5.10.35
-
cpe:2.3:o:linux:linux_kernel:5.10.36
-
cpe:2.3:o:linux:linux_kernel:5.10.37
-
cpe:2.3:o:linux:linux_kernel:5.10.38
-
cpe:2.3:o:linux:linux_kernel:5.10.39
-
cpe:2.3:o:linux:linux_kernel:5.10.4
-
cpe:2.3:o:linux:linux_kernel:5.10.40
-
cpe:2.3:o:linux:linux_kernel:5.10.41
-
cpe:2.3:o:linux:linux_kernel:5.10.42
-
cpe:2.3:o:linux:linux_kernel:5.10.43
-
cpe:2.3:o:linux:linux_kernel:5.10.44
-
cpe:2.3:o:linux:linux_kernel:5.10.45
-
cpe:2.3:o:linux:linux_kernel:5.10.46
-
cpe:2.3:o:linux:linux_kernel:5.10.47
-
cpe:2.3:o:linux:linux_kernel:5.10.48
-
cpe:2.3:o:linux:linux_kernel:5.10.49
-
cpe:2.3:o:linux:linux_kernel:5.10.5
-
cpe:2.3:o:linux:linux_kernel:5.10.50
-
cpe:2.3:o:linux:linux_kernel:5.10.51
-
cpe:2.3:o:linux:linux_kernel:5.10.52
-
cpe:2.3:o:linux:linux_kernel:5.10.53
-
cpe:2.3:o:linux:linux_kernel:5.10.54
-
cpe:2.3:o:linux:linux_kernel:5.10.55
-
cpe:2.3:o:linux:linux_kernel:5.10.56
-
cpe:2.3:o:linux:linux_kernel:5.10.57
-
cpe:2.3:o:linux:linux_kernel:5.10.58
-
cpe:2.3:o:linux:linux_kernel:5.10.59
-
cpe:2.3:o:linux:linux_kernel:5.10.6
-
cpe:2.3:o:linux:linux_kernel:5.10.60
-
cpe:2.3:o:linux:linux_kernel:5.10.61
-
cpe:2.3:o:linux:linux_kernel:5.10.62
-
cpe:2.3:o:linux:linux_kernel:5.10.63
-
cpe:2.3:o:linux:linux_kernel:5.10.64
-
cpe:2.3:o:linux:linux_kernel:5.10.65
-
cpe:2.3:o:linux:linux_kernel:5.10.66
-
cpe:2.3:o:linux:linux_kernel:5.10.67
-
cpe:2.3:o:linux:linux_kernel:5.10.68
-
cpe:2.3:o:linux:linux_kernel:5.10.69
-
cpe:2.3:o:linux:linux_kernel:5.10.7
-
cpe:2.3:o:linux:linux_kernel:5.10.70
-
cpe:2.3:o:linux:linux_kernel:5.10.71
-
cpe:2.3:o:linux:linux_kernel:5.10.72
-
cpe:2.3:o:linux:linux_kernel:5.10.73
-
cpe:2.3:o:linux:linux_kernel:5.10.74
-
cpe:2.3:o:linux:linux_kernel:5.10.75
-
cpe:2.3:o:linux:linux_kernel:5.10.76
-
cpe:2.3:o:linux:linux_kernel:5.10.77
-
cpe:2.3:o:linux:linux_kernel:5.10.78
-
cpe:2.3:o:linux:linux_kernel:5.10.79
-
cpe:2.3:o:linux:linux_kernel:5.10.8
-
cpe:2.3:o:linux:linux_kernel:5.10.80
-
cpe:2.3:o:linux:linux_kernel:5.10.81
-
cpe:2.3:o:linux:linux_kernel:5.10.82
-
cpe:2.3:o:linux:linux_kernel:5.10.83
-
cpe:2.3:o:linux:linux_kernel:5.10.84
-
cpe:2.3:o:linux:linux_kernel:5.10.85
-
cpe:2.3:o:linux:linux_kernel:5.10.86
-
cpe:2.3:o:linux:linux_kernel:5.10.87
-
cpe:2.3:o:linux:linux_kernel:5.10.88
-
cpe:2.3:o:linux:linux_kernel:5.10.89
-
cpe:2.3:o:linux:linux_kernel:5.10.9
-
cpe:2.3:o:linux:linux_kernel:5.10.90
-
cpe:2.3:o:linux:linux_kernel:5.10.91
-
cpe:2.3:o:linux:linux_kernel:5.10.92
-
cpe:2.3:o:linux:linux_kernel:5.10.93
-
cpe:2.3:o:linux:linux_kernel:5.10.94
-
cpe:2.3:o:linux:linux_kernel:5.10.95
-
cpe:2.3:o:linux:linux_kernel:5.10.96
-
cpe:2.3:o:linux:linux_kernel:5.10.97
-
cpe:2.3:o:linux:linux_kernel:5.10.98
-
cpe:2.3:o:linux:linux_kernel:5.10.99
-
cpe:2.3:o:linux:linux_kernel:5.11
-
cpe:2.3:o:linux:linux_kernel:5.11.1
-
cpe:2.3:o:linux:linux_kernel:5.11.10
-
cpe:2.3:o:linux:linux_kernel:5.11.11
-
cpe:2.3:o:linux:linux_kernel:5.11.12
-
cpe:2.3:o:linux:linux_kernel:5.11.13
-
cpe:2.3:o:linux:linux_kernel:5.11.14
-
cpe:2.3:o:linux:linux_kernel:5.11.15
-
cpe:2.3:o:linux:linux_kernel:5.11.16
-
cpe:2.3:o:linux:linux_kernel:5.11.17
-
cpe:2.3:o:linux:linux_kernel:5.11.18
-
cpe:2.3:o:linux:linux_kernel:5.11.19
-
cpe:2.3:o:linux:linux_kernel:5.11.2
-
cpe:2.3:o:linux:linux_kernel:5.11.20
-
cpe:2.3:o:linux:linux_kernel:5.11.21
-
cpe:2.3:o:linux:linux_kernel:5.11.3
-
cpe:2.3:o:linux:linux_kernel:5.11.4
-
cpe:2.3:o:linux:linux_kernel:5.11.5
-
cpe:2.3:o:linux:linux_kernel:5.11.6
-
cpe:2.3:o:linux:linux_kernel:5.11.7
-
cpe:2.3:o:linux:linux_kernel:5.11.8
-
cpe:2.3:o:linux:linux_kernel:5.11.9
-
cpe:2.3:o:linux:linux_kernel:5.12
-
cpe:2.3:o:linux:linux_kernel:5.12.1
-
cpe:2.3:o:linux:linux_kernel:5.12.2
-
cpe:2.3:o:linux:linux_kernel:5.12.3
-
cpe:2.3:o:linux:linux_kernel:5.12.4
-
cpe:2.3:o:linux:linux_kernel:5.13
-
cpe:2.3:o:linux:linux_kernel:5.9
-
cpe:2.3:o:linux:linux_kernel:5.9.0
-
cpe:2.3:o:linux:linux_kernel:5.9.1
-
cpe:2.3:o:linux:linux_kernel:5.9.10
-
cpe:2.3:o:linux:linux_kernel:5.9.11
-
cpe:2.3:o:linux:linux_kernel:5.9.12
-
cpe:2.3:o:linux:linux_kernel:5.9.13
-
cpe:2.3:o:linux:linux_kernel:5.9.14
-
cpe:2.3:o:linux:linux_kernel:5.9.15
-
cpe:2.3:o:linux:linux_kernel:5.9.16
-
cpe:2.3:o:linux:linux_kernel:5.9.2
-
cpe:2.3:o:linux:linux_kernel:5.9.3
-
cpe:2.3:o:linux:linux_kernel:5.9.4
-
cpe:2.3:o:linux:linux_kernel:5.9.5
-
cpe:2.3:o:linux:linux_kernel:5.9.6
-
cpe:2.3:o:linux:linux_kernel:5.9.7
-
cpe:2.3:o:linux:linux_kernel:5.9.8
-
cpe:2.3:o:linux:linux_kernel:5.9.9