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.
- Bir guest çok sayıda FIFO event channel allocate eder.
EVTCHNOP_reset'i çağırır (veya domain destruction'ı tetikler).- 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).