Ana içeriğe geç
Programlama

Go çalışma zamanındaki 32-bit bellek hatası çözüldü

Öne çıkanlar

  • Hata, 32-bit little-endian sistemlerde Go çalışma zamanının epoll veri alanını yanlış yorumlamasından kaynaklandı.
  • Sorun yalnızca milyonlarca ağ nesnesi oluşturan ve uzun süre kesintisiz çalışan uygulamalarda tetiklendi.
  • Go projesine gönderilen yama kabul edilerek resmi kod tabanına dahil edildi.

Sigma Star mühendisleri, 32-bit ARM gömülü Linux sistemlerinde uzun süre çalışan Go uygulamalarının çökmesine yol açan kritik bir çalışma zamanı hatasını tespit ederek düzeltti. Go 1.14 sürümünden bu yana fark edilmeyen hata, Go'nun netpoll ağ mekanizmasında Linux epoll veri yapısının yanlış işlenmesinden kaynaklandı.

Araştırma, Go çalışma zamanının 8 baytlık epoll veri alanında hem ham işaretçileri hem de etiketli işaretçileri sakladığını ortaya koydu. 32-bit little-endian mimarilerde, geri dönüştürülen soket nesnelerini izleyen sayaç milyonlu değerlere ulaştığında, etiket alanı bellek adresiyle çakıştı. Bu durum, çalışma zamanının standart bir soketi olay tanımlayıcısı sanmasına ve uygulamanın beklenmeyen olay bildirimleri nedeniyle ölümcül hata vermesine yol açtı.

Geliştiriciler, ham işaretçi yerine etiketli boş işaretçi kullanarak bellek çakışmasını gideren bir yama hazırladı. Go ana kod tabanına entegre edilen bu düzeltme, 32-bit gömülü sistemlerde uzun süre kesintisiz çalışan ağ servislerinin kararlılığını güvenceye aldı.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.