Rilis kernel Linux 5.8

Setelah dua bulan pengembangan, Linus Torvalds diperkenalkan rilis kernel Linux 5.8. Di antara perubahan yang paling menonjol: detektor kondisi balapan KCSAN, mekanisme universal untuk mengirimkan pemberitahuan ke ruang pengguna, dukungan perangkat keras untuk enkripsi inline, mekanisme keamanan yang ditingkatkan untuk ARM64, dukungan untuk prosesor Baikal-T1 Rusia, kemampuan untuk memasang instance procfs secara terpisah , implementasi mekanisme keamanan Shadow untuk ARM64 Call Stack dan BTI.

Kernel 5.8 menjadi yang terbesar dalam hal jumlah perubahan dari semua kernel selama keberadaan proyek. Selain itu, perubahan tersebut tidak terkait dengan satu subsistem mana pun, tetapi mencakup bagian kernel yang berbeda dan terutama terkait dengan pengerjaan ulang dan pembersihan internal. Perubahan terbesar terlihat pada pengemudi. Versi baru ini mencakup 17606 perbaikan dari 2081 pengembang, yang mempengaruhi sekitar 20% dari seluruh file dalam repositori kode kernel. Ukuran patch adalah 65 MB (perubahan mempengaruhi 16180 file, 1043240 baris kode ditambahkan, 489854 baris dihapus). Sebagai perbandingan, cabang 5.7 memiliki 15033 perbaikan dan ukuran patch 39 MB. Sekitar 37% dari semua perubahan yang diperkenalkan di 5.8 terkait dengan driver perangkat, sekitar 16% perubahan terkait dengan pembaruan kode khusus untuk arsitektur perangkat keras, 11% terkait dengan tumpukan jaringan, 3% terkait dengan sistem file, dan 4% terkait dengan subsistem kernel internal.

Utama inovasi:

  • Virtualisasi dan Keamanan
    • Pemuatan modul kernel yang memiliki bagian dengan kode di mana bit-bit yang memungkinkan eksekusi dan penulisan diatur secara bersamaan disediakan. Perubahan ini diterapkan sebagai bagian dari proyek yang lebih besar untuk menghilangkan penggunaan halaman memori pada kernel yang memungkinkan eksekusi dan penulisan secara bersamaan.
    • Sekarang dimungkinkan untuk membuat instance procfs terpisah, memungkinkan penggunaan beberapa titik mount procfs, dipasang dengan opsi berbeda, tetapi mencerminkan namespace pengidentifikasi proses yang sama (pid namespace). Sebelumnya, semua titik pemasangan procfs hanya mencerminkan satu representasi internal, dan perubahan apa pun pada parameter pemasangan akan memengaruhi semua titik pemasangan lainnya yang terkait dengan namespace ID proses yang sama. Di antara area di mana pemasangan dengan opsi berbeda mungkin diperlukan adalah penerapan isolasi ringan untuk sistem tertanam dengan kemampuan untuk menyembunyikan jenis proses dan node informasi tertentu di procfs.
    • Dukungan untuk mekanisme tersebut telah diterapkan untuk platform ARM64
      Tumpukan Panggilan Bayangan, disediakan oleh kompiler Clang untuk melindungi dari penimpaan alamat pengirim suatu fungsi jika terjadi buffer overflow tumpukan. Inti dari perlindungan adalah menyimpan alamat pengirim dalam tumpukan β€œbayangan” terpisah setelah mentransfer kontrol ke suatu fungsi dan mengambil alamat ini sebelum keluar dari fungsi tersebut.

    • Dukungan instruksi telah ditambahkan untuk platform ARM64 ARMv8.5-BTI (Indikator Target Cabang) untuk melindungi pelaksanaan serangkaian instruksi yang tidak boleh dicabangkan. Pemblokiran transisi ke bagian kode yang sewenang-wenang diterapkan untuk mencegah pembuatan gadget dalam eksploitasi yang menggunakan teknik pemrograman berorientasi kembali (ROP - Pemrograman Berorientasi Kembali; penyerang tidak mencoba menempatkan kodenya di memori, tetapi beroperasi pada bagian yang sudah ada instruksi mesin yang diakhiri dengan instruksi kontrol kembali, yang darinya rangkaian panggilan dibangun untuk memperoleh fungsionalitas yang diinginkan).
    • Menambahkan dukungan perangkat keras untuk enkripsi inline perangkat blok (Enkripsi Sebaris). Perangkat enkripsi inlinep biasanya dibangun ke dalam drive, tetapi secara logis terletak di antara memori sistem dan disk, secara transparan mengenkripsi dan mendekripsi I/O berdasarkan kunci yang ditentukan kernel dan algoritma enkripsi.
    • Menambahkan opsi baris perintah kernel "initrdmem" untuk memungkinkan Anda menentukan alamat memori fisik initrd saat menempatkan image boot awal di RAM.
    • Menambahkan kemampuan baru: CAP_PERFMON untuk mengakses subsistem kinerja dan melakukan pemantauan kinerja. CAP_BPF, yang mengizinkan operasi BPF tertentu (seperti memuat program BPF) yang sebelumnya memerlukan hak CAP_SYS_ADMIN (hak CAP_SYS_ADMIN kini dibagi menjadi kombinasi CAP_BPF, CAP_PERFMON, dan CAP_NET_ADMIN).
    • Ditambahkan perangkat virtio-mem baru yang memungkinkan Anda melakukan hot-plug dan hot-plug memori ke sistem tamu.
    • Penerapan penarikan kembali operasi pemetaan di /dev/mem jika driver perangkat menggunakan area memori yang tumpang tindih.
    • Menambahkan perlindungan kerentanan CROSSTalk/SRBDS, yang memungkinkan Anda memulihkan hasil instruksi tertentu yang dijalankan pada inti CPU lain.
  • Layanan memori dan sistem
    • Dalam dokumen yang menjelaskan aturan untuk memformat kode, diterima rekomendasi untuk penggunaan terminologi inklusif. Pengembang tidak disarankan menggunakan kombinasi 'master/slave' dan 'blacklist/whitelist', serta kata 'slave' secara terpisah. Rekomendasi tersebut hanya menyangkut penggunaan baru dari istilah-istilah ini. Penyebutan kata-kata tertentu yang sudah ada di kernel tidak akan tersentuh. Dalam kode baru, penggunaan istilah yang ditandai diperbolehkan jika diperlukan untuk mendukung API dan ABI yang diekspos di ruang pengguna, serta ketika memperbarui kode untuk mendukung perangkat keras atau protokol yang ada yang spesifikasinya memerlukan penggunaan istilah tertentu.
    • Alat debugging disertakan KCSAN (Kernel Concurrency Sanitizer), dirancang untuk deteksi dinamis kondisi balapan di dalam inti. Penggunaan KCSAN didukung saat membangun di GCC dan Clang, dan memerlukan modifikasi khusus pada waktu kompilasi untuk melacak akses memori (breakpoint digunakan yang dipicu saat memori dibaca atau dimodifikasi). Fokus pengembangan KCSAN adalah pada pencegahan positif palsu, skalabilitas, dan kemudahan penggunaan.
    • Ditambahkan mekanisme universal mengirimkan pemberitahuan dari kernel ke ruang pengguna. Mekanisme ini didasarkan pada driver pipa standar dan memungkinkan Anda mendistribusikan notifikasi dari kernel secara efisien melalui saluran yang terbuka di ruang pengguna. Titik penerimaan notifikasi adalah pipa yang dibuka dalam mode khusus dan memungkinkan pesan yang diterima dari kernel diakumulasikan dalam buffer cincin. Membaca dilakukan oleh fungsi read() biasa. Pemilik saluran menentukan sumber mana di kernel yang perlu dipantau dan dapat menentukan filter untuk mengabaikan jenis pesan dan kejadian tertentu. Dari kejadian tersebut, saat ini hanya operasi dengan kunci yang didukung, seperti menambah/menghapus kunci dan mengubah atributnya. Acara ini rencananya akan digunakan di GNOME.
    • Pengembangan fungsionalitas 'pidfd' yang berkelanjutan untuk membantu menangani situasi penggunaan kembali PID (pidfd dikaitkan dengan proses tertentu dan tidak berubah, sedangkan PID dapat dikaitkan dengan proses lain setelah proses saat ini yang terkait dengan PID tersebut berakhir). Versi baru menambahkan dukungan untuk menggunakan pidfd untuk melampirkan proses ke namespace (memungkinkan pidfd ditentukan saat menjalankan panggilan sistem setns). Menggunakan pidfd memungkinkan Anda mengontrol lampiran suatu proses ke beberapa jenis ruang nama dengan satu panggilan, secara signifikan mengurangi jumlah panggilan sistem yang diperlukan dan mengimplementasikan lampiran dalam mode atom (jika lampiran ke salah satu ruang nama gagal, yang lain tidak akan terhubung) .
    • Menambahkan panggilan sistem baru faccessat2(), berbeda dari
      aksesat() argumen tambahan dengan flag yang sesuai dengan rekomendasi POSIX (sebelumnya flag ini ditiru di perpustakaan C, dan faccessat2 baru memungkinkannya diimplementasikan di kernel).

    • Di Cgroup ditambahkan pengaturan memory.swap.high yang dapat digunakan untuk memperlambat tugas yang memakan terlalu banyak ruang swap.
    • Ke antarmuka I/O asinkron io_uring menambahkan dukungan untuk panggilan sistem tee().
    • Mekanisme tambahan "Pengulang BPF, dirancang untuk menampilkan konten struktur kernel ke ruang pengguna.
    • Asalkan kemampuan untuk menggunakan buffer cincin untuk pertukaran data antar program BPF.
    • Ke dalam mekanismenya padata, dirancang untuk mengatur eksekusi tugas paralel di kernel, menambahkan dukungan untuk tugas multi-thread dengan penyeimbangan beban.
    • Dalam mekanisme pstore, yang memungkinkan Anda menyimpan informasi debug tentang penyebab kerusakan di area memori yang tidak hilang di antara reboot, ditambahkan backend untuk menyimpan informasi untuk memblokir perangkat.
    • Dari cabang kernel PREEMPT_RT terharu penerapan kunci lokal.
    • Ditambahkan API alokasi buffer baru (AF_XDP), bertujuan untuk menyederhanakan penulisan driver jaringan dengan dukungan XDP (eXpress Data Path).
    • Untuk arsitektur RISC-V, dukungan untuk debugging komponen kernel menggunakan KGDB telah diterapkan.
    • Sebelum rilis 4.8, persyaratan versi GCC yang dapat digunakan untuk membangun kernel telah ditingkatkan. Dalam salah satu rilis berikutnya direncanakan untuk menaikkan standar ke GCC 4.9.
  • Subsistem Disk, I/O dan Sistem File
    • Di Pemeta Perangkat ditambahkan pengendali dm-ebs (meniru ukuran blok) baru, yang dapat digunakan untuk meniru ukuran blok logis yang lebih kecil (misalnya, untuk meniru sektor 512-byte pada disk berukuran sektor 4K).
    • Sistem file F2FS sekarang mendukung kompresi menggunakan algoritma LZO-RLE.
    • Di dm-crypt ditambahkan dukungan untuk kunci terenkripsi.
    • Btrfs telah meningkatkan penanganan operasi baca dalam mode I/O langsung. Saat pemasangan dipercepat memeriksa subbagian yang dihapus dan direktori yang dibiarkan tanpa induk.
    • Parameter β€œnodelete” telah ditambahkan ke CIFS, memungkinkan pemeriksaan izin normal di server, tetapi melarang klien menghapus file atau direktori.
    • Ext4 telah meningkatkan penanganan kesalahan ENOSPC saat menggunakan multithreading. xattr telah menambahkan dukungan untuk namespace gnu.* yang digunakan di GNU Hurd.
    • Untuk Ext4 dan XFS, dukungan untuk operasi DAX diaktifkan (akses langsung ke sistem file, melewati cache halaman tanpa menggunakan tingkat perangkat blok) sehubungan dengan file dan direktori individual.
    • Dalam panggilan sistem statusx() bendera ditambahkan STATX_ATTR_DAX, yang bila ditentukan, mengambil informasi menggunakan mesin DAX.
    • EXFAT ditambahkan dukungan untuk verifikasi area boot.
    • Dalam LEMAK ditingkatkan pemuatan elemen FS secara proaktif. Pengujian drive USB 2TB yang lambat menunjukkan pengurangan waktu penyelesaian pengujian dari 383 menjadi 51 detik.
  • Subsistem jaringan
    • Dalam kode untuk mengendalikan pengoperasian jembatan jaringan ditambahkan dukungan protokol MRP (Media Redundancy Protocol), yang memungkinkan toleransi kesalahan dengan mengulang beberapa switch Ethernet.
    • Ke sistem pengatur lalu lintas (Tc) ditambahkan tindakan β€œgerbang” baru, yang memungkinkan untuk menentukan interval waktu untuk memproses dan membuang paket tertentu.
    • Dukungan untuk menguji kabel jaringan yang terhubung dan diagnosis mandiri perangkat jaringan telah ditambahkan ke kernel dan utilitas ethtool.
    • Dukungan untuk algoritma MPLS (Multiprotocol Label Switching) telah ditambahkan ke tumpukan IPv6 untuk merutekan paket menggunakan peralihan label multiprotokol (MPLS sebelumnya didukung untuk IPv4).
    • Menambahkan dukungan untuk transmisi paket IKE (Internet Key Exchange) dan IPSec melalui TCP (RFC 8229) untuk melewati kemungkinan pemblokiran UDP.
    • Ditambahkan perangkat blok jaringan rnbd, yang memungkinkan Anda mengatur akses jarak jauh ke perangkat blok menggunakan transportasi RDMA (InfiniBand, RoCE, iWARP) dan protokol RTRS.
    • Di tumpukan TCP ditambahkan dukungan untuk kompresi rentang dalam respons pengakuan selektif (SACK).
    • Untuk IPv6 diimplementasikan Dukungan TCP-LD (RFC 6069, Gangguan Konektivitas Panjang).
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Driver DRM i915 untuk kartu video Intel menyertakan dukungan untuk chip Intel Tiger Lake (GEN12) secara default, yang mana diimplementasikan kemampuan untuk menggunakan sistem SAGV (System Agent Geyserville) untuk menyesuaikan frekuensi dan tegangan secara dinamis tergantung pada konsumsi daya atau persyaratan kinerja.
    • Driver amdgpu telah menambahkan dukungan untuk format piksel FP16 dan kemampuan untuk bekerja dengan buffer terenkripsi di memori video (TMZ, Trusted Memory Zone).
    • Menambahkan dukungan sensor daya untuk prosesor AMD Zen dan Zen2, serta sensor suhu untuk AMD Ryzen 4000 Renoir. Dukungan untuk mengambil informasi konsumsi daya melalui antarmuka disediakan untuk AMD Zen dan Zen2 RAPL (Batas Daya Rata-Rata Berjalan).
    • Menambahkan dukungan untuk format pengubah NVIDIA ke driver Nouveau. Untuk gv100, kemampuan untuk menggunakan mode pemindaian interlaced telah diterapkan. Menambahkan definisi vGPU.
    • Menambahkan dukungan untuk GPU Adreno A405, A640 dan A650 ke driver MSM (Qualcomm).
    • Ditambahkan kerangka internal untuk mengelola sumber daya DRM (Direct Rendering Manager).
    • Menambahkan dukungan untuk smartphone Xiaomi Redmi Note 7 dan Samsung Galaxy S2, serta laptop Elm/Hana Chromebook.
    • Menambahkan driver untuk panel LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Menambahkan dukungan untuk papan dan platform ARM Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Kotak TV Xnano X5, Stinger96, Beaglebone-AI.

    • Menambahkan dukungan untuk prosesor MIPS Loongson-2K (disingkat Loongson64). Untuk CPU Loongson 3, dukungan virtualisasi menggunakan hypervisor KVM telah ditambahkan.
    • Ditambahkan
      dukungan untuk prosesor Baikal-T1 Rusia dan sistem-on-chip berdasarkan itu BE-T1000. Prosesor Baikal-T1 berisi dua inti superscalar P5600 MIPS 32 r5 yang beroperasi pada 1.2 GHz. Chip ini berisi cache L2 (1 MB), pengontrol memori DDR3-1600 ECC, 1 port Ethernet 10Gb, 2 port Ethernet 1Gb, pengontrol PCIe Gen.3 x4, 2 port SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Prosesor ini menyediakan dukungan perangkat keras untuk virtualisasi, instruksi SIMD, dan akselerator kriptografi perangkat keras terintegrasi yang mendukung GOST 28147-89. Chip ini dikembangkan menggunakan blok inti prosesor MIPS32 P5600 Warrior yang dilisensikan dari Imagination Technologies.

Pada saat yang sama, Yayasan Perangkat Lunak Bebas Amerika Latin terbentuk
pilihan kernel 5.8 sepenuhnya gratis - Linux gratis 5.8-gnu, dibersihkan dari elemen firmware dan driver yang berisi komponen tidak bebas atau bagian kode, yang cakupannya dibatasi oleh pabrikan. Rilis baru ini menonaktifkan pemuatan blob pada driver untuk Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Aimplifier, Microsemi ZL38060 Connected Home Audio Processor, dan Budak I2C EEPROM. Kode pembersihan gumpalan yang diperbarui di GPU Adreno, HabanaLabs Goya, layar sentuh x86, vt6656, serta driver dan subsistem btbcm.

Sumber: opennet.ru

Tambah komentar