- Yazar, PowerPC32 mimarisinde çalışan
gdbserver ve çok iş parçacıklı uygulamalar içeren bir projedeki hata ayıklama sorununu ele alıyordu.
- Sorun,
gdbserver bağlantısının kopması ve artık hata ayıklama oturumunun kontrol edilememesiydi.
- Araştırma ve inceleme sonrasında yazar, bu soruna yol açan tam commit'i işaret eden bir e-posta dizisi buldu.
- Yazar, PowerPC mimarisi ve
task_struct çevresindeki değişikliklerle ilgili commit açıklamalarını okumak için 3-4 gün harcadı ve bu sorunun sonraki kernel sürümlerinde çözülüp çözülmediğini anlamaya çalıştı.
- Yazar,
thread_struct iş parçacıklarını taşımak, pahole ile task_struct düzenini incelemek ve hata ayıklanan sürecin iş parçacıklarının ne zaman zamanlandığını anlamak için ftrace kullanmak gibi çeşitli araç ve tekniklerden yararlandı.
- Yazar, takılı kalan iş parçacığının diğerlerinden farklı olarak yalnızca bir kez zamanlandığını görerek, sorunun bir bellek bozulması problemi olabileceğini keşfetti.
- Yazar, Linux'ta donanım breakpoint'leri kullandı ve kimin yazdığını anlamak için
__state alanına bir donanım breakpoint'i yerleştiren bir Linux kernel modülü geliştirdi.
- Yazar, sorunun
ptrace_put_fpr içindeki bir buffer overflow'dan (POKEUSER API'si tarafından kullanılıyor) kaynaklandığını ve bunun task_struct içindeki __state gibi kritik alanların üzerine yazılmasına neden olduğunu keşfetti.
- Yazar, bunun bir güvenlik sorununa yol açabileceği için sorunu düzeltmek amacıyla Linux kernel güvenlik ekibine (
security@kernel.org) bir patch gönderdi.
- PowerPC yöneticisi Michael Ellerman, yazarın patch'ini kabul etmek yerine düzeltmenin kendi sürümünü uyguladı.
- Yazar, çalışmasının gerektiği gibi takdir edilmediğini, küçümsendiğini hissetti ve buna öfkelendi. Kendisine yalnızca
Reported-by etiketi verildi.
- Yazarın ilk kernel katkısı, insanların kendi çalışmalarına uygun takdir verilmesini önemli görmemesi nedeniyle yaptığı konuşmalar boyunca hayal kırıklığı ve moral bozukluğuyla dolu bir deneyim oldu.
1 yorum
Hacker News görüşleri