Skip to content

Xen evtchn_reset FIFO unbounded preemption (CVE-2020-25601)

evtchn_reset()/evtchn_destroy(), çok sayıda FIFO event channel'ı teardown ederken preemption noktalarından yoksundur; bu da bir guest'in bir CPU'yu neredeyse sınırsız bir süre tekeline almasına olanak tanır — sistem geneli bir DoS.

Mechanism

Bug sınıfı / invariant

Guest-kontrollü miktarlar üzerindeki uzun süren hypervisor operasyonları, diğer domain'leri aç bırakmamak için Xen'in hypercall-continuation/preemption mekanizması aracılığıyla yield etmelidir. evtchn_reset() ve evtchn_destroy() içindeki FIFO event-channel teardown döngüleri, bir guest'in tüm channel'ları üzerinde preemption checkpoint'leri olmadan iterate eder. İhlal edilen invariant şudur: tek bir hypercall sınırsız CPU tüketemez. Çok sayıda channel oluşturup sonra reset ederek bir guest son derece uzun, non-preemptible bir döngüye zorlar ve host'un tamamını yavaşlatır.

Walkthrough

Yalnızca kavramsal

XSA-344'ten üst düzey yeniden kurulum.

  1. Bir guest çok sayıda FIFO event channel allocate eder.
  2. EVTCHNOP_reset'i çağırır (veya domain destruction'ı tetikler).
  3. Teardown tüm channel'ları tek seferde iterate eder, CPU'yu tutar ve birlikte konuşlanan domain'ler için DoS'a neden olur.

Detection

  • Olağandışı derecede çok sayıda event channel allocate edip sonra reset eden guest'ler.
  • Bir domain'in evtchn operasyonlarına atfedilebilen CPU-zaman tepe noktaları / scheduling açlığı.
  • Uzun süren hypercall'lar hakkında watchdog uyarıları.

Mitigation

  • Teardown döngülerine preemption checkpoint'leri ekleyen XSA-344 patch'ini uygula (Xen 4.10–4.14/unstable).
  • Konfigürasyon: guest-başına channel'ları sınırla (örn. max_event_channels=256).

References