CVE-2025-22090
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: x86/mm/pat: copy_page_range() fonksiyonunda fork() başarısız olduğunda VM_PAT işlemesinin düzeltilmesi track_pfn_copy() başarısız olursa, dst VMA zaten maple tree yapısına eklenmiş olur. fork() başarısız olduğu için maple tree temizlenecek ve ne herhangi bir rezervasyon yaptığımız ne de sayfa tablolarını kopyaladığımız dst VMA ile karşılaşılacaktır. Sonuç olarak untrack_pfn(), VM_PAT bayrağını görecek ve PAT bilgisini sayfa tablosundan almaya çalışacaktır; ancak sayfa tablosu kopyalanmadığı için bu işlem başarısız olacaktır. En kolay çözüm, track_pfn_copy() başarısız olursa dst VMA'nın VM_PAT bayrağının basitçe temizlenmesi olurdu. Ancak, VM_PAT bayrağını "basitçe" temizlemekle ilgili tüm süreç güvenilmezdir: Eğer track_pfn_copy() aşamasını geçer ve bir rezervasyon gerçekleştirirsek ancak sayfa tablolarını kopyalamak başarısız olursa, sadece VM_PAT bayrağını temizleyeceğiz ve rezervasyonu uygun şekilde geri almayacağız... ki bu da yanlıştır. Bu nedenle sorun düzgünce çözülmüştür: VM_PAT bayrağı yalnızca rezervasyon başarılı olursa ayarlanacak (başlangıçta temiz bırakılacak) ve sayfa tabloları kopyalanırken herhangi bir hata oluşursa rezervasyon geri alınacaktır: Rezervasyon geri alındıktan sonra VM_PAT bayrağı temizlenecektir. Kopyalanan tüm sayfa tablosu girişlerinin, copy_page_range() başarıyla tamamlandıktan sonra VMA kaldırıldığında silineceği unutulmamalıdır; o sırada VM_PAT ayarlı olmadığı için VM_PAT'ı tekrar temizlemeye çalışmayacağız ve untrack_pfn() sorunsuz çalışacaktır. Bu sayfa tablolarının rezervasyon olmadan yerinde kalmasının bir sorun teşkil etmediği unutulmamalıdır çünkü fork() işlemi iptal edilmektedir; bu süreç asla çalışmayacaktır. Bir yeniden üretici (reproducer) bunu genellikle ilk denemede tetikleyebilir: https://gitlab.com/davidhildenbrand/scratchspace/-/raw/main/reproducers/pat_fork.c WARNING: CPU: 26 PID: 11650 at arch/x86/mm/pat/memtype.c:983 get_pat_info+0xf6/0x110 Modules linked in: ... CPU: 26 UID: 0 PID: 11650 Comm: repro3 Not tainted 6.12.0-rc5+ #92 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014 RIP: 0010:get_pat_info+0xf6/0x110 ... Call Trace: <TASK> ... untrack_pfn+0x52/0x110 unmap_single_vma+0xa6/0xe0 unmap_vmas+0x105/0x1f0 exit_mmap+0xf6/0x460 __mmput+0x4b/0x120 copy_process+0x1bf6/0x2aa0 kernel_clone+0xab/0x440 __do_sys_clone+0x66/0x90 do_syscall_64+0x95/0x180 Muhtemelen bu durum şu commit sırasında gözden kaçmıştır: d155df53f310 ("x86/mm/pat: clear VM_PAT if copy_p4d_range failed") ...ve rezervasyonu geri almak yerine sadece VM_PAT bayrağını temizledik. Bu fonksiyonların dokümantasyonunu include/linux/pgtable.h dosyasında tutun, tek bir yer fazlasıyla yeterlidir -- track_pfn_remap/untrack_pfn gibi diğer fonksiyonlar için bunu ayrıca temizlemeliyiz.
Nasıl düzeltilir
- linux linux_kernel6.6.87, 6.12.23, 6.13.11, 6.14.2 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 2.6.29 ≤ v < 6.6.87, 6.7 ≤ v < 6.12.23, 6.13 ≤ v < 6.13.11, 6.14 ≤ v < 6.14.2 | 6.6.87, 6.12.23, 6.13.11, 6.14.2 |
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.