CVE-2026-89483
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: nvme: discard yedek sayfasını sıfırla nvme_setup_discard(), komut kaç aralık beyan ederse etsin, bazı cihazlar 'Number of Ranges' alanını yoksaydığı için her zaman sizeof(struct nvme_dsm_range) * NVME_DSM_MAX_RANGES = 4096 baytı DSM yükü olarak eşler - Fixes: commit kaydı, beyan edilen aralıkların ötesini okuyan iki durumu belgelemektedir. Tek bir aralıklı discard işlemi yalnızca ilk 16 baytı doldurur. Normalde tampon bellek kzalloc() ile gelir ve diğer 4080 bayt sıfırdır. Bu tahsis başarısız olduğunda, kod denetleyici başına düşen ctrl->discard_page seçeneğine geri döner; bu sayfa nvme_init_ctrl() tarafından alloc_page(GFP_KERNEL) ile alınır ve hiçbir zaman sıfırlanmaz, dolayısıyla bu 4080 bayt sayfanın en son tuttuğu değerler neyse odur ve denetleyiciye aktarılır. Buraya ulaşmak için kzalloc(GFP_ATOMIC | __GFP_NOWARN) işleminin başarısız olması gerekir, yani bellek baskısı oluşmalıdır; bu durum uzaktan tetiklenemez. Tahsisin KMSAN altında başarısız olması, sızdırılan kuyruk kısmının vmemmap struct page işaretçileriyle dolu olduğu bir senaryo ile bunu yeniden üretir. Rapordaki kapsam, tüm 4096 bayt değil, yükün kısmi bir transferidir; buradaki 16 baytlık sınır, beyan edilen tek aralıktır: [ 11.991601] BUG: KMSAN: uninit-value in dma_map_phys+0x14c8/0x1900 [ 11.991969] dma_map_phys+0x14c8/0x1900 [ 11.992220] dma_map_page_attrs+0xcf/0x130 [ 11.992485] e1000_xmit_frame+0x4099/0x6d10 [ 11.992768] dev_hard_start_xmit+0x22f/0xa80 [ 11.993068] sch_direct_xmit+0x35c/0xcb0 [ 11.993315] __dev_queue_xmit+0x1ee5/0x5eb0 [ 11.993608] ip_finish_output2+0x1903/0x1c30 [ 11.993881] ip_finish_output+0x288/0x870 [ 11.994125] ip_output+0x15e/0x400 [ 11.994365] __ip_queue_xmit+0x1e85/0x1fb0 [ 11.994639] ip_queue_xmit+0x60/0x80 [ 11.994899] __tcp_transmit_skb+0x4e71/0x5fa0 [ 11.995210] tcp_write_xmit+0x3a36/0x9160 [ 11.995533] __tcp_push_pending_frames+0xc5/0x3c0 [ 11.995854] tcp_push+0x7dc/0x840 [ 11.996076] tcp_sendmsg_locked+0x766c/0x8400 [ 11.996371] tcp_sendmsg+0x4b/0x90 [ 11.996572] inet_sendmsg+0x134/0x2a0 [ 11.996823] __sock_sendmsg+0x265/0x360 [ 11.997076] sock_sendmsg+0x100/0x1e0 [ 11.997293] nvme_tcp_try_send+0x196f/0x6370 [ 11.997605] nvme_tcp_queue_rq+0x1d54/0x20b0 [ 11.997882] blk_mq_dispatch_rq_list+0x5ee/0x2e50 [ 11.998175] __blk_mq_sched_dispatch_requests+0x16dc/0x24a0 [ 11.998539] blk_mq_sched_dispatch_requests+0x11b/0x2c0 [ 11.998865] blk_mq_run_work_fn+0x13b/0x280 [ 11.999146] process_scheduled_works+0x966/0x1ad0 [ 11.999465] worker_thread+0xe44/0x1480 [ 11.999709] kthread+0x53b/0x600 [ 11.999927] ret_from_fork+0x29f/0x7c0 [ 12.000191] ret_from_fork_asm+0x1a/0x30 [ 12.000460] [ 12.000558] Uninit was created at: [ 12.000788] __alloc_frozen_pages_noprof+0x8bf/0xd30 [ 12.001096] alloc_pages_mpol+0x1d0/0x5f0 [ 12.001326] alloc_pages_noprof+0x102/0x290 [ 12.001627] nvme_init_ctrl+0x5a3/0x9f0 [ 12.001891] nvme_tcp_create_ctrl+0xd75/0x19b0 [ 12.002170] nvmf_dev_write+0x4c68/0x4fd0 [ 12.002426] vfs_write+0x587/0x1a10 [ 12.002636] __x64_sys_write+0x207/0x4f0 [ 12.002874] x64_sys_call+0x2ff0/0x3ea0 [ 12.003123] do_syscall_64+0x147/0x3b0 [ 12.003400] entry_SYSCALL_64_after_hwframe+0x77/0x7f [ 12.003680] [ 12.003777] Bytes 16-2843 of 2844 are uninitialized [ 12.004068] Memory access of size 2844 starts at ffff888109f82000 [ 12.004412] [ 12.004530] CPU: 0 UID: 0 PID: 101 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMECTL-gf5098b6bae76 #1 PREEMPT(lazy) [ 12.005127] 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 [ 12.005762] Workqueue: kblockd blk_mq_run_work_fn [ 12.006073] ===================================================== Sayfa __GFP_ZERO ile tahsis edilir. Tek tahsis noktası bunun her kullanımını kapsar: discard işleminin yazmadığı baytlar sıfır kalır ve yazdığı baytlar ise halihazırda gönderilmiş olan denetleyicinin kendi aralık listesini tutar.
Nasıl düzeltilir
- Linux Linux76139b5bbf531e675934b97227be3521c7fdd537, 3f84d2bd0d8ae8c7e8e0f8fc3cbf018a282971a1, 415f2772ebcbc7f3f1ab1a71915dab82cee3465e, 66b5af23b6f956e57f8205c46aa80b054631be34, dc4d4b70a863f7e39ef8bd137634be4e6db8b084, 67551d8430df94c827e1830bd3a5fae1f66a5219, f5827817b4fc7feeabf4f53fb4b626e6edc52fef, bededeaaeff404978a5a8e2a605a6c3017cddd3e, 4.20, 5.5 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < 76139b5bbf531e675934b97227be3521c7fdd537, 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < 3f84d2bd0d8ae8c7e8e0f8fc3cbf018a282971a1, 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < 415f2772ebcbc7f3f1ab1a71915dab82cee3465e, 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < 66b5af23b6f956e57f8205c46aa80b054631be34, 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < dc4d4b70a863f7e39ef8bd137634be4e6db8b084, 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < 67551d8430df94c827e1830bd3a5fae1f66a5219, 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < f5827817b4fc7feeabf4f53fb4b626e6edc52fef, 530436c45ef2e446c12538a400e465929a0b3ade ≤ v < bededeaaeff404978a5a8e2a605a6c3017cddd3e, ffa56cbdd2409b522b4cb56461bea1c45889417b, 8b0acb768a06083b0d28bace1481c1f6679e76f4, 4.19.92 ≤ v < 4.20, 5.4.7 ≤ v < 5.5, 5.5 | 76139b5bbf531e675934b97227be3521c7fdd537, 3f84d2bd0d8ae8c7e8e0f8fc3cbf018a282971a1, 415f2772ebcbc7f3f1ab1a71915dab82cee3465e, 66b5af23b6f956e57f8205c46aa80b054631be34, dc4d4b70a863f7e39ef8bd137634be4e6db8b084, 67551d8430df94c827e1830bd3a5fae1f66a5219, f5827817b4fc7feeabf4f53fb4b626e6edc52fef, bededeaaeff404978a5a8e2a605a6c3017cddd3e, 4.20, 5.5 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.