CVE-2025-39756

Orta

Açıklama

Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: fs: INT_MAX değerini aşan dosya tanımlayıcı tablosu ayırmalarını önle sysctl_nr_open çok yüksek bir değere ayarlandığında (örneğin systemd tarafından ayarlanan 1073741816 gibi), sınıra yakın dosya tanımlayıcıları kullanmaya çalışan süreçler INT_MAX değerini aşan büyük bellek ayırma girişimlerini tetikleyebilir ve bu da mm/slub.c dosyasında bir WARNING oluşmasına yol açar: WARNING: CPU: 0 PID: 44 at mm/slub.c:5027 __kvmalloc_node_noprof+0x21a/0x288 Bu durum, kvmalloc_array() ve kvmalloc() işlevlerinin istenen boyutun INT_MAX değerini aşıp aşmadığını denetlemesi ve ayırma __GFP_NOWARN ile işaretlenmediğinde uyarı üretmesi nedeniyle ortaya çıkar. Özellikle nr_open 1073741816 (0x3ffffff8) olarak ayarlandığında ve bir süreç dup2(oldfd, 1073741880) çağrısını yaptığında, çekirdek şu ayırmaları denemeye çalışır: - Dosya tanımlayıcı dizisi: 1073741880 * 8 bayt = 8.589.935.040 bayt - Birden fazla bitmap: ~400MB - Toplam ayırma boyutu: > 8GB (INT_MAX = 2.147.483.647 değerini aşar) Yeniden üretim: 1. /proc/sys/fs/nr_open değerini 1073741816 olarak ayarlayın: # echo 1073741816 > /proc/sys/fs/nr_open 2. Yüksek bir dosya tanımlayıcısı kullanan bir program çalıştırın: #include <unistd.h> #include <sys/resource.h> int main() { struct rlimit rlim = {1073741824, 1073741824}; setrlimit(RLIMIT_NOFILE, &rlim); dup2(2, 1073741880); // Uyarıyı tetikler return 0; } 3. dmesg çıktısında mm/slub.c:5027 konumunda WARNING gözlemleyin systemd commit a8b627a, fs.nr_open değerinin olası en yüksek değere otomatik olarak yükseltilmesini getirmiştir. Gerekçe, bellek denetim gruplarına (memcg) sahip sistemlerin artık ayrı dosya tanımlayıcı sınırlarına ihtiyaç duymadığıydı çünkü bellek düzgün şekilde hesaba katılıyordu. Ancak bu değişiklik şunları gözden kaçırmıştır: 1. Çekirdeğin ayırma işlevleri, memcg hesaba katımından bağımsız olarak hâlâ INT_MAX değerini azami boyut olarak uygular 2. Dosya tanımlayıcı sınırlarını meşru şekilde test eden programlar ve testler istemeden büyük ayırmaları tetikleyebilir 3. Ortaya çıkan ayırmalar (>8GB) pratik değildir ve her zaman başarısız olacaktır systemd'nin algoritması INT_MAX ile başlar ve çekirdek kabul edene kadar değeri yarıya indirmeye devam eder. Çoğu sistemde bu, nr_open değerinin 1073741816 (0x3ffffff8) olarak ayarlanmasıyla sonuçlanır; bu da 1GB dosya tanımlayıcının hemen altındadır. Süreçler normal çalışmada bu sınıra yakın dosya tanımlayıcıları nadiren kullansa da, belirli selftestler (tools/testing/selftests/core/unshare_test.c gibi) ve dosya tanımlayıcı sınırlarını test eden programlar bu sorunu tetikleyebilir. Bunu düzeltmek için alloc_fdtable() içine istenen ayırma boyutunun INT_MAX değerini aşmadığından emin olan bir denetim eklenmiştir. Bu, işlemin çekirdek uyarısını tetiklemek yerine -EMFILE ile başarısız olmasına neden olur ve pratik olmayan >8GB bellek ayırma isteğini önler.

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın11 Eyl 2025
İlk görülme11 Eyl 2025

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.4.297, 5.10.241, 5.15.190, 6.1.149, 6.6.103, 6.12.43, 6.15.11, 6.16.2 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel2.6.25 ≤ v < 5.4.297, 5.5 ≤ v < 5.10.241, 5.11 ≤ v < 5.15.190, 5.16 ≤ v < 6.1.149, 6.2 ≤ v < 6.6.103, 6.7 ≤ v < 6.12.43, 6.13 ≤ v < 6.15.11, 6.16 ≤ v < 6.16.25.4.297, 5.10.241, 5.15.190, 6.1.149, 6.6.103, 6.12.43, 6.15.11, 6.16.2
debian debian_linux11.0—

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-2025-39756 · Linux Kernel · Dark Radar