
Rust soundness hatası: Kod, alan atamasıyla 'static yaşam süresi sınırlarını aşıyor
Yeni tespit edilen Rust sorunu, kovaryanslı alan atamasının yapının 'static yaşam süresi kısıtını ihlal ettiğini ve Drop kodunun silinmiş belleği okumasına olanak tanıdığını gösteriyor.
Hata
Rust tip sistemindeki soundness deliği, koda kovaryanslı alan atamasıyla yapının 'static yaşam süresi gereksinimini atlama olanağı tanır. rust-lang/rust#164250 olarak kaydedilen bu sorun, kısa süreli bir lokal değere referans atanabilen jenerik yapı Q<T: 'static + Send> ile ilgilidir. Alan kovaryanslı olduğu için, değer 'static kısıtını karşılamasa bile atama kabul edilir. Daha sonra yapının Drop implementasyonu saklanan referansı 'static olarak kabul eder ve bu, scope sona erdikten sonra serbest bırakılmış stack belleğinin okunmasına neden olabilir.
Etki ve Ağırlık
Reprodüser mevcut nightly ve stable sürümlerde, en azından 1.85.0'dan itibaren derleniyor. Bir katılımcıya göre, bu örüntü 2017'den beri, yani Rust 1.18.0'dan bu yana derleniyor. Sanitizer'lar olmadan program serbest bırakılmış string içeriğini yazdırır; AddressSanitizer sırasında ise stack-use-after-scope hatasıyla çöker. Bakımcı lcnr bunu P-high olarak sınıflandırdı, P-critical değil, çünkü 11 yıldır keşfedilmedi ve sömürüsü kasıtlı zararlı bir Drop implementasyonu gerektiriyor, rastgele yanlış kullanım değil.
Yanıt
Sorun borrow checker, yıkıcılar, yaşam süresi ve varyans etiketleriyle etiketlenmiş ve Types Team tarafından izleniyor. Ekip, tip sisteminin soundness düzeltmesinin yüksek öncelikli olduğunu, bir sonraki nesil trait solver üzerinde çalışma, bölge kısıtı işleme ve Project Zero ile birlikte belirtti. Bildirimden hemen sonra „fix: refuse handles in aggregate storage on both front ends“ başlıklı bir commit pushlandı. GitHub thread'i geçici olarak kilitlendi ve hararetli bir tartışma başlatmasının ardından yalnızca iş birlikçilerle sınırlandırıldı.
Kaynaklar: Hacker News
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.