· kaynak dev.to (home feed)
Linux, x86'dan __get_user ve __put_user'u 48 commitlik bir kernel temizliğiyle kaldırıyor
Linus Torvalds, denetimsiz __get_user() ve __put_user() yardımcılarını ve x86 arayüzlerini, 50 dosyaya dokunan ve 801 satırı silen 48 commitlik bir seriyle kaldırdı.

Denetimsiz kullanıcı erişim yardımcıları x86'dan silindi
Linus Torvalds, __get_user() ve __put_user()'ı — ve tüm arayüzlerini — x86 kernelinden kaldırdı. dev.to'daki bir yazıya göre temizlik, 50 dosyaya dokunan 48 commit halinde geliyor ve 801 satırı siliyor. kernel/, drivers/ ve net/ dahil olmak üzere ağacın mimariden bağımsız bölümlerindeki tüm kullanımları temizliyor, ardından x86 tanımlarının kendisini kaldırıyor: header makroları ile __get_user_nocheck_1/2/4/8 assembly rutinleri ve getuser.S ile putuser.S'teki karşılıkları.
Kernel'da uzun süredir kullanıcı belleği ile kernel belleği arasında küçük değerler taşımak için iki çift yardımcı fonksiyon vardı. get_user() ve put_user(), bir pointera dokunmadan önce onun geçerli bir kullanıcı alanı adresi olduğunu doğrular. Alt çizgili varyantlar bu doğrulamayı atlıyordu, bu da onları sürekli bir tehdue dönüştürüyordu: kötü ya da kötü niyetli bir pointer veren çağıran taraf, kernel'ı asla okumaması veya yazmaması gereken bir belleğe yönlendirebiliyordu.
Modern CPU'ların tersine çevirdiği bir hız hilesi
Denetimi atlamak zamanında gerçek bir performans kazandırıyordu. Bir kod aynı temel pointer üzerinden çok sayıda alan okuduğunda, aralığı bir kez doğrulayıp denetimsiz yardımcıları tekrar tekrar kullanmak daha küçük ve daha hızlı makine kodu üretiyordu. Torvalds merge commitinde bunun bir zamanlar doğru olduğunu ama yıllardır öyle olmadığını yazdı: günümüz donanımında baskın maliyet aralık denetimi değil, kullanıcı erişimini açıp kapatmaktır.
x86'da bu açıp kapatma işlemi STAC ve CLAC talimatlarıyla yapılır; bunlar SMAP güvenlik özelliği altında kernel'ın kullanıcı belleğine dokunabileceği pencereyi açar ve kapatır. Pencereyi bir kez açıp içinde çok sayıda denetimsiz erişim yapmak, artık her __get_user() çağrısında geçiş maliyetini ödemekten daha iyi. dev.to'nun aktardığıyla ifade ettiği gibi, kötüye kullanım — ki Torvalds bunu fiilen her kullanım olarak tanımlıyor — doğru şekilde yapmaktan daha yavaş ve adres aralığı denetlenmediği için güvenliksiz.
Yardımcıları hayatta tutan dört örüntü
Torvalds'ın commit mesajı denetimsiz çiftin ayakta kalmasının dört nedenini sayıyor ve seri her birine cevap veriyor. Performans argümanı, STAC/CLAC maliyetleri baskın hale geldiğinde ortadan kalktı. Yardımcıların istisna işleme kabiliyetine güvenerek güvenilirsiz kernel pointerları okuyan kullanımlar — Alpha'nın dik_show_code() ve OpenRISC'in show_registers() gibi fault handler'ları — artık özel get_kernel_nofault() yardımcısını kullanıyor. Atomic bağlamlarda might_fault() uyarılarından kaçınan kodlar, vdpa_sim sürücü düzeltmesinde olduğu gibi, artık standart yardımcıların kullanılabilmesi için pagefault_disable()'ı açıkça çağırıyor. En zor kategori, kullanıcı ya da kernel belleği olabilecek pointerları işleyen koddı; x86 SEV #VC kesme işleyicisinin MMIO emülasyonu bunun örneğiydi ve 205 satırlık bir değişiklikle açık vc_get_mem() ve vc_put_mem() yardımcılarını kazandı.
Yapay zeka destekli yamalama ve hızlı bir merge
Zemin hazırlayan, 2025'te merge edilen ve erişim penceresini scoped_user_read_access() gibi blok yapıları üzerinden otomatik yöneten Thomas Gleixner'ın kapsamlı kullanıcı erişim bölgesi yardımcılarıydı. Torvalds, sigaction sinyal işleme yolunu dönüştüren tek bir elle yazılmış örnekle başladı ve serinin buradan büyümesine izin verdi. Claude kullanmasını "gösterişli bir coccinelle betiği" olarak tanımladı — yeni kod üretmek yerine yapılandırılmış dönüşümler uyguluyor — ki dev.to bunu, kernel çalışmalarında yapay zeka araçlarını hızlanan kullanımının bir başka işareti olarak not ediyor. İnceleme hızlı ilerledi: x86 maintainer'ı Ingo Molnar hem 64 bit hem 32 bit sistemlerde başarılı derleme ve önyükleme bildirdi, vhost maintainer'ı Michael S. Tsirkin bir VM'de test etti ve bir Acked-by verdi. Torvalds yamaların kusursuz olmadığını kabul etti ama bilinen bozuk kodu yerinde bırakmaktansa erken merge edip sorunları bulmanın daha iyi olduğunu savundu. Seri, Linux 2.5.x döneminden kalma 32 bit COW işlemeye tarihî bir i915 yorumundaki verify_area(VERIFY_WRITE) referansını bile temizledi.
Diğer mimariler maintainer'larına bırakıldı
x86 arayüzü tamamen kaybediyor; başka yerlerde tablo değişiyor. arm64'de denetimli ve denetimsiz sürümlerin uygulamaları zaten aynıydı, bu yüzden acil bir şey kalmadı. asm-generic/uaccess.h kullanan mimariler adları iç yardımcılar olarak tutuyor. Gerçekten zor dönüşümler — sparc32, m68k, LoongArch, PA-RISC ve MIPS — maintainer'larına bırakıldı; Torvalds sparc32 sinyal işleme durumuna baktığını, fazla çirkin bulduğunu ve motivasyonunun tükendiğini söyledi. Yine de diffstat, Alpha, ARM, Hexagon, Nios II, OpenRISC, PowerPC ve s390 genelinde sinyal ve trap işlemeyi yeniden yazıyor.
Neden önemli
Tek tek çağrı noktalarını yamalamak yerine arayüzü silmek, ileride hiçbir x86 kodunun kullanıcı pointer doğrulamasından sessizce kaçamayacağı anlamına geliyor — eksik denetim hatalarının tüm bir sınıfı artık orada masadan kalkmış durumda. Bu aynı zamanda performans bilgisinin raf ömrü olduğunun bir hatırlatması: bir donanım neslinin maliyet modeliyle gerekçelendirilen bir optimizasyon, sonraki nesilde hem daha yavaş hem de tehlikeli hale geldi. Ve yöntem — bir maintainer'ın yazdığı örnek yama ve ardından mekanik durumların LLM destekli toplu dönüşümü, e-posta listesinde insan incelemesiyle — dünyanın en güvenlik açısından kritik kod tabanlarından birinde büyük temizlikler için tekrarlanabilir bir örüntü olarak ortaya çıkıyor.
- #linux-kernel
- #x86
- #security
- #open-source
- #linus-torvalds
İlgili yazılar
- Zero Day Initiative, yamalanmamış Linux kernel açıklarını yanlışlıkla herkese açık posta listesinde ifşa etti
- HackiOS, Apple'ın açık kaynak XNU çekirdeğiyle Android donanımında değiştirilmemiş iOS 16.5 çalıştırıyor
- PHP kritik açıklarını yamaladı: Uzaktan kod çalıştırma imkânı doğuran zafiyetler dünya genelinde siteleri karanlığa gömdü