CVE-2026-89482

Source
https://cve.org/CVERecord?id=CVE-2026-89482
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-89482.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-89482
Downstream
AZL (1)
BELL (1)
CLSA (1)
DEBIAN (1)
openSUSE (2)
SUSE (13)
UBUNTU (1)
Related
Published
2026-09-11T19:43:37Z
Modified
2026-10-24T02:30:38Z
Severity
  • 9.8 (Critical) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CVSS Calculator
Summary
nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone
Details

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

nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone

Commit 25e5cb780e62 ("nvme-tcp: fix possible crash in write_zeroes processing") established that blk_rq_payload_bytes() must not be read without first checking blk_rq_nr_phys_segments(), and recorded the result in nvme_tcp_setup_cmd_pdu() as req->data_len. The receive side was left as it was.

The two differ for REQ_OP_WRITE_ZEROES, which has no physical segments but a non-zero blk_rq_bytes(), so setup leaves req->iter untouched while the receive gate lets a C2HData through and nvme_tcp_recv_data() copies into whatever the previous command on that tag left there. The driver-private area is zeroed only when the tag set is allocated.

Reproduced with a test target that leaves a residual iterator on a tag and then sends a C2HData for a WRITE_ZEROES command on the same tag:

BUG: KASAN: wild-memory-access in _copy_to_iter+0x642/0x1330 Write of size 512 at addr ffe728c2175dfa81 by task kworker/0:1H/103

CPU: 0 UID: 0 PID: 103 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMETCP-gf5098b6bae76 #1 PREEMPT(lazy) Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 Workqueue: nvme_tcp_wq nvme_tcp_io_work Call Trace: dump_stack_lvl+0x53/0x70 kasan_report+0xce/0x100 ? _copy_to_iter+0x642/0x1330 kasan_check_range+0x105/0x1b0 __asan_memcpy+0x3c/0x60 _copy_to_iter+0x642/0x1330 ? __pfx_sock_has_perm+0x10/0x10 ? worker_thread+0x45b/0xd10 ? __pfx__copy_to_iter+0x10/0x10 ? _raw_spin_lock_bh+0x83/0xe0 ? __pfx__raw_spin_lock_bh+0x10/0x10 __skb_datagram_iter+0xf3/0x820 ? __pfx_simple_copy_to_iter+0x10/0x10 ? __asan_memcpy+0x3c/0x60 ? skb_copy_bits+0x58d/0x830 skb_copy_datagram_iter+0x37/0x120 nvme_tcp_recv_skb+0xa07/0x4320 ? __pfx_nvme_tcp_recv_skb+0x10/0x10 __tcp_read_sock+0x1ab/0x810 ? __pfx_nvme_tcp_recv_skb+0x10/0x10 ? __pfx_lock_sock_nested+0x10/0x10 ? __pfx___tcp_read_sock+0x10/0x10 nvme_tcp_try_recv+0x152/0x1e0 ? __pfx_nvme_tcp_try_recv+0x10/0x10 ? __pfx_mutex_unlock+0x10/0x10 nvme_tcp_io_work+0x1e4/0x6c0 ? __schedule+0x181a/0x49f0 ? __pfx_nvme_tcp_io_work+0x10/0x10 process_one_work+0x633/0x1030

Keep the blk_rq_payload_bytes() test and add req->data_len to it. The old test is what rejects a C2HData naming a tag that is no longer in flight, because blk_update_request() zeroes rq->__data_len on completion; req->data_len and req->curr_bio are driver-private and survive completion, so they cannot stand in for it. Setup initialises the iterator only when both req->curr_bio and req->data_len are set, so the gate now tests the same two.

Database specific
{
    "cna_assigner":  "Linux",
    "osv_generated_from":  "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/89xxx/CVE-2026-89482.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
25e5cb780e62bde432b401f312bb847edc78b432
Fixed
32ea8ce96b9bd797c59c351ce490ffd97adaa8c0
Fixed
dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab
Fixed
7ed0b61bbc145988be292c4d3ec580aebd8d2bcd
Fixed
b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528
Fixed
b36161701cb366f416afdcf70771d432a7c74753
Fixed
6a01b58263108eaf9869bb6f82f07709240c6589
Fixed
641ad3a30ba560f0a9a610376c568d7b75d2a2aa
Fixed
3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
5.4.36
Fixed
5.5
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
5.6.8
Fixed
5.7
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
f507ae6e33cbe56c4e3fe000434fc0ecc263d098
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b1458c16f4e26e87492e58e4d24a1873bd09232a

Affected versions

v5.*
v5.4.100
v5.4.101
v5.4.102
v5.4.103
v5.4.104
v5.4.105
v5.4.106
v5.4.107
v5.4.108
v5.4.109
v5.4.110
v5.4.111
v5.4.112
v5.4.113
v5.4.114
v5.4.115
v5.4.116
v5.4.117
v5.4.118
v5.4.119
v5.4.120
v5.4.121
v5.4.122
v5.4.123
v5.4.124
v5.4.125
v5.4.126
v5.4.127
v5.4.128
v5.4.129
v5.4.130
v5.4.131
v5.4.132
v5.4.133
v5.4.134
v5.4.135
v5.4.136
v5.4.137
v5.4.138
v5.4.139
v5.4.140
v5.4.141
v5.4.142
v5.4.143
v5.4.144
v5.4.145
v5.4.146
v5.4.147
v5.4.148
v5.4.149
v5.4.150
v5.4.151
v5.4.152
v5.4.153
v5.4.154
v5.4.155
v5.4.156
v5.4.157
v5.4.158
v5.4.159
v5.4.160
v5.4.161
v5.4.162
v5.4.163
v5.4.164
v5.4.165
v5.4.166
v5.4.167
v5.4.168
v5.4.169
v5.4.170
v5.4.171
v5.4.172
v5.4.173
v5.4.174
v5.4.175
v5.4.176
v5.4.177
v5.4.178
v5.4.179
v5.4.180
v5.4.181
v5.4.182
v5.4.183
v5.4.184
v5.4.185
v5.4.186
v5.4.187
v5.4.188
v5.4.189
v5.4.190
v5.4.191
v5.4.192
v5.4.193
v5.4.194
v5.4.195
v5.4.196
v5.4.197
v5.4.198
v5.4.199
v5.4.200
v5.4.201
v5.4.202
v5.4.203
v5.4.204
v5.4.205
v5.4.206
v5.4.207
v5.4.208
v5.4.209
v5.4.210
v5.4.211
v5.4.212
v5.4.213
v5.4.214
v5.4.215
v5.4.216
v5.4.217
v5.4.218
v5.4.219
v5.4.220
v5.4.221
v5.4.222
v5.4.223
v5.4.224
v5.4.225
v5.4.226
v5.4.227
v5.4.228
v5.4.229
v5.4.230
v5.4.231
v5.4.232
v5.4.233
v5.4.234
v5.4.235
v5.4.236
v5.4.237
v5.4.238
v5.4.239
v5.4.240
v5.4.241
v5.4.242
v5.4.243
v5.4.244
v5.4.245
v5.4.246
v5.4.247
v5.4.248
v5.4.249
v5.4.250
v5.4.251
v5.4.252
v5.4.253
v5.4.254
v5.4.255
v5.4.256
v5.4.257
v5.4.258
v5.4.259
v5.4.260
v5.4.261
v5.4.262
v5.4.263
v5.4.264
v5.4.265
v5.4.266
v5.4.267
v5.4.268
v5.4.269
v5.4.270
v5.4.271
v5.4.272
v5.4.273
v5.4.274
v5.4.275
v5.4.276
v5.4.277
v5.4.278
v5.4.279
v5.4.280
v5.4.281
v5.4.282
v5.4.283
v5.4.284
v5.4.285
v5.4.286
v5.4.287
v5.4.288
v5.4.289
v5.4.290
v5.4.291
v5.4.292
v5.4.293
v5.4.294
v5.4.295
v5.4.296
v5.4.297
v5.4.298
v5.4.299
v5.4.300
v5.4.301
v5.4.302
v5.4.36
v5.4.37
v5.4.38
v5.4.39
v5.4.40
v5.4.41
v5.4.42
v5.4.43
v5.4.44
v5.4.45
v5.4.46
v5.4.47
v5.4.48
v5.4.49
v5.4.50
v5.4.51
v5.4.52
v5.4.53
v5.4.54
v5.4.55
v5.4.56
v5.4.57
v5.4.58
v5.4.59
v5.4.60
v5.4.61
v5.4.62
v5.4.63
v5.4.64
v5.4.65
v5.4.66
v5.4.67
v5.4.68
v5.4.69
v5.4.70
v5.4.71
v5.4.72
v5.4.73
v5.4.74
v5.4.75
v5.4.76
v5.4.77
v5.4.78
v5.4.79
v5.4.80
v5.4.81
v5.4.82
v5.4.83
v5.4.84
v5.4.85
v5.4.86
v5.4.87
v5.4.88
v5.4.89
v5.4.90
v5.4.91
v5.4.92
v5.4.93
v5.4.94
v5.4.95
v5.4.96
v5.4.97
v5.4.98
v5.4.99
v5.6.10
v5.6.11
v5.6.12
v5.6.13
v5.6.14
v5.6.15
v5.6.16
v5.6.17
v5.6.18
v5.6.19
v5.6.8
v5.6.9

Database specific

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

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
5.7.0
Fixed
5.10.270
Type
ECOSYSTEM
Events
Introduced
5.11.0
Fixed
5.15.221
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.188
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.157
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.109
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.50
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
7.2.4

Database specific

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