{"id":21404,"date":"2026-09-12T04:31:08","date_gmt":"2026-09-11T20:31:08","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89482"},"modified":"2026-09-12T04:31:08","modified_gmt":"2026-09-11T20:31:08","slug":"cve-2026-89482","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89482","title":{"rendered":"CVE-2026-89482 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnvme-tcp: do not acce"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone<\/p>\n<p>Commit 25e5cb780e62 (&#8220;nvme-tcp: fix possible crash in write_zeroes<br \/>\nprocessing&#8221;) established that blk_rq_payload_bytes() must not be read<br \/>\nwithout first checking blk_rq_nr_phys_segments(), and recorded the<br \/>\nresult in nvme_tcp_setup_cmd_pdu() as req-&gt;data_len. The receive side<br \/>\nwas left as it was.<\/p>\n<p>The two differ for REQ_OP_WRITE_ZEROES, which has no physical segments<br \/>\nbut a non-zero blk_rq_bytes(), so setup leaves req-&gt;iter untouched<br \/>\nwhile the receive gate lets a C2HData through and nvme_tcp_recv_data()<br \/>\ncopies into whatever the previous command on that tag left there. The<br \/>\ndriver-private area is zeroed only when the tag set is allocated.<\/p>\n<p>Reproduced with a test target that leaves a residual iterator on a tag<br \/>\nand then sends a C2HData for a WRITE_ZEROES command on the same tag:<\/p>\n<p>BUG: KASAN: wild-memory-access in _copy_to_iter+0x642\/0x1330<br \/>\nWrite of size 512 at addr ffe728c2175dfa81 by task kworker\/0:1H\/103<\/p>\n<p>CPU: 0 UID: 0 PID: 103 Comm: kworker\/0:1H Not tainted 7.2.0-rc5-NVMETCP-gf5098b6bae76 #1 PREEMPT(lazy)<br \/>\nHardware 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<br \/>\nWorkqueue: nvme_tcp_wq nvme_tcp_io_work<br \/>\nCall Trace:<\/p>\n<p> dump_stack_lvl+0x53\/0x70<br \/>\n kasan_report+0xce\/0x100<br \/>\n ? _copy_to_iter+0x642\/0x1330<br \/>\n kasan_check_range+0x105\/0x1b0<br \/>\n __asan_memcpy+0x3c\/0x60<br \/>\n _copy_to_iter+0x642\/0x1330<br \/>\n ? __pfx_sock_has_perm+0x10\/0x10<br \/>\n ? worker_thread+0x45b\/0xd10<br \/>\n ? __pfx__copy_to_iter+0x10\/0x10<br \/>\n ? _raw_spin_lock_bh+0x83\/0xe0<br \/>\n ? __pfx__raw_spin_lock_bh+0x10\/0x10<br \/>\n __skb_datagram_iter+0xf3\/0x820<br \/>\n ? __pfx_simple_copy_to_iter+0x10\/0x10<br \/>\n ? __asan_memcpy+0x3c\/0x60<br \/>\n ? skb_copy_bits+0x58d\/0x830<br \/>\n skb_copy_datagram_iter+0x37\/0x120<br \/>\n nvme_tcp_recv_skb+0xa07\/0x4320<br \/>\n ? __pfx_nvme_tcp_recv_skb+0x10\/0x10<br \/>\n __tcp_read_sock+0x1ab\/0x810<br \/>\n ? __pfx_nvme_tcp_recv_skb+0x10\/0x10<br \/>\n ? __pfx_lock_sock_nested+0x10\/0x10<br \/>\n ? __pfx___tcp_read_sock+0x10\/0x10<br \/>\n nvme_tcp_try_recv+0x152\/0x1e0<br \/>\n ? __pfx_nvme_tcp_try_recv+0x10\/0x10<br \/>\n ? __pfx_mutex_unlock+0x10\/0x10<br \/>\n nvme_tcp_io_work+0x1e4\/0x6c0<br \/>\n ? __schedule+0x181a\/0x49f0<br \/>\n ? __pfx_nvme_tcp_io_work+0x10\/0x10<br \/>\n process_one_work+0x633\/0x1030<\/p>\n<p>Keep the blk_rq_payload_bytes() test and add req-&gt;data_len to it. The<br \/>\nold test is what rejects a C2HData naming a tag that is no longer in<br \/>\nflight, because blk_update_request() zeroes rq-&gt;__data_len on<br \/>\ncompletion; req-&gt;data_len and req-&gt;curr_bio are driver-private and<br \/>\nsurvive completion, so they cannot stand in for it. Setup initialises<br \/>\nthe iterator only when both req-&gt;curr_bio and req-&gt;data_len are set, so<br \/>\nthe gate now tests the same two.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone<\/p>\n<p>Commit 25e5cb780e62 (&#8220;nvme-tcp: fix possible crash in write_<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21404","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}