CVE-2024-46797

Orta

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: powerpc/qspinlock: MCS kuyruğundaki deadlock hatası düzeltildi queued_spin_lock_slowpath() fonksiyonunda qnodesp->count artırıldıktan sonra ve node->lock başlatılmadan önce bir kesme meydana gelirse, başka bir CPU get_tail_qnode() içinde güncel olmayan kilit değerleri görebilir. Güncel olmayan kilit değeri söz konusu CPU'daki kilit ile eşleşirse, yanlış qnode'un "next" işaretçisine yazılır. Bu durum, önceki CPU MCS kuyruğunun başına geçtiğinde, kuyruktaki halefi tarafından "next" işaretçisi ayarlanana kadar süresiz olarak döneceği için bir deadlock'a neden olur. 16 çekirdekli (16EC/16VP) paylaşımlı bir LPAR üzerinde stress-ng çalıştırılması, zaman zaman aşağıdakine benzer kilitlenmelere yol açmaktadır: $ stress-ng --all 128 --vm-bytes 80% --aggressive \ --maximize --oomable --verify --syslog \ --metrics --times --timeout 5m watchdog: CPU 15 Hard LOCKUP ...... NIP [c0000000000b78f4] queued_spin_lock_slowpath+0x1184/0x1490 LR [c000000001037c5c] _raw_spin_lock+0x6c/0x90 Call Trace: 0xc000002cfffa3bf0 (unreliable) _raw_spin_lock+0x6c/0x90 raw_spin_rq_lock_nested.part.135+0x4c/0xd0 sched_ttwu_pending+0x60/0x1f0 __flush_smp_call_function_queue+0x1dc/0x670 smp_ipi_demux_relaxed+0xa4/0x100 xive_muxed_ipi_action+0x20/0x40 __handle_irq_event_percpu+0x80/0x240 handle_irq_event_percpu+0x2c/0x80 handle_percpu_irq+0x84/0xd0 generic_handle_irq+0x54/0x80 __do_irq+0xac/0x210 __do_IRQ+0x74/0xd0 0x0 do_IRQ+0x8c/0x170 hardware_interrupt_common_virt+0x29c/0x2a0 --- interrupt: 500 at queued_spin_lock_slowpath+0x4b8/0x1490 ...... NIP [c0000000000b6c28] queued_spin_lock_slowpath+0x4b8/0x1490 LR [c000000001037c5c] _raw_spin_lock+0x6c/0x90 --- interrupt: 500 0xc0000029c1a41d00 (unreliable) _raw_spin_lock+0x6c/0x90 futex_wake+0x100/0x260 do_futex+0x21c/0x2a0 sys_futex+0x98/0x270 system_call_exception+0x14c/0x2f0 system_call_vectored_common+0x15c/0x2ec Aşağıdaki kod akışı deadlock'un nasıl oluştuğunu göstermektedir. Kısalık adına, her iki kilidin de (A ve B) çekişmeli olduğu ve queued_spin_lock_slowpath() fonksiyonunun çağrıldığı varsayılmıştır. CPU0 CPU1 ---- ---- spin_lock_irqsave(A) | spin_unlock_irqrestore(A) | spin_lock(B) | | | ▼ | id = qnodesp->count++; | (Not: nodes[0].lock == A) | | | ▼ | Kesme | ("nodes[0].lock = B" işleminden önce gerçekleşir)| | | ▼ | spin_lock_irqsave(A) | | | ▼ | id = qnodesp->count++ | nodes[1].lock = A | | | ▼ | MCS kuyruğunun sonu | | spin_lock_irqsave(A) ▼ | MCS kuyruğunun başı ▼ | CPU0 önceki sondur ▼ | Süresiz dönme ▼ ("nodes[1].next != NULL" olana dek) prev = get_tail_qnode(A, CPU0) | ▼ prev == &qnodes[CPU0].nodes[0] (zira qnodes...

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın18 Eyl 2024
İlk görülme18 Eyl 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.6.51, 6.10.10 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel6.2 ≤ v < 6.6.51, 6.7 ≤ v < 6.10.10, 6.116.6.51, 6.10.10

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.

Intelligence 360 paketinde

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.

CVE-2024-46797 · Linux Kernel · Dark Radar