Rilis kernel Linux 6.2

Setelah dua bulan pengembangan, Linus Torvalds meluncurkan rilis kernel Linux 6.2. Di antara perubahan yang paling menonjol: penerimaan kode di bawah lisensi Copyleft-Next diperbolehkan, implementasi RAID5/6 di Btrfs ditingkatkan, integrasi dukungan untuk bahasa Rust berlanjut, overhead perlindungan terhadap serangan Retbleed berkurang, dan kemampuan untuk mengatur konsumsi memori selama penulisan balik ditambahkan, mekanisme penyeimbangan TCP PLB (Protective Load Balancing) ditambahkan, mekanisme perlindungan aliran perintah hybrid (FineIBT) telah ditambahkan, BPF sekarang memiliki kemampuan untuk mendefinisikan objek dan struktur datanya sendiri , utilitas rv (Verifikasi Runtime) disertakan, konsumsi daya dalam penerapan kunci RCU telah berkurang.

Versi baru mencakup 16843 perbaikan dari 2178 pengembang, ukuran patch 62 MB (perubahan mempengaruhi 14108 file, 730195 baris kode ditambahkan, 409485 baris dihapus). Sekitar 42% dari semua perubahan yang diperkenalkan di 6.2 terkait dengan driver perangkat, sekitar 16% perubahan terkait dengan pembaruan kode khusus untuk arsitektur perangkat keras, 12% terkait dengan tumpukan jaringan, 4% terkait dengan sistem file, dan 3% terkait dengan subsistem kernel internal.

Inovasi utama dalam kernel 6.2:

  • Layanan memori dan sistem
    • Diizinkan untuk memasukkan ke dalam kode kernel dan perubahan yang disediakan di bawah lisensi Copyleft-Next 0.3.1. Lisensi Copyleft-Next dibuat oleh salah satu penulis GPLv3 dan sepenuhnya kompatibel dengan lisensi GPLv2, sebagaimana dikonfirmasi oleh pengacara dari SUSE dan Red Hat. Dibandingkan dengan GPLv2, lisensi Copyleft-Next jauh lebih ringkas dan lebih mudah dipahami (bagian pendahuluan dan penyebutan kompromi yang sudah ketinggalan zaman telah dihapus), menentukan kerangka waktu dan prosedur untuk menghilangkan pelanggaran, dan secara otomatis menghapus persyaratan copyleft untuk perangkat lunak usang yang berusia lebih dari 15 tahun.

      Copyleft-Next juga berisi klausul hibah teknologi kepemilikan, yang, tidak seperti GPLv2, membuat lisensi ini kompatibel dengan lisensi Apache 2.0. Untuk memastikan kompatibilitas penuh dengan GPLv2, Copyleft-Next secara eksplisit menyatakan bahwa karya turunan dapat disediakan di bawah lisensi GPL selain lisensi Copyleft-Next yang asli.

    • Strukturnya mencakup utilitas "rv", yang menyediakan antarmuka untuk interaksi dari ruang pengguna dengan pengendali subsistem RV (Runtime Verification), yang dirancang untuk memeriksa operasi yang benar pada sistem yang sangat andal yang menjamin tidak adanya kegagalan. Verifikasi dilakukan saat runtime dengan melampirkan penangan ke titik penelusuran yang memeriksa kemajuan aktual eksekusi terhadap model mesin deterministik referensi yang telah ditentukan sebelumnya yang menentukan perilaku sistem yang diharapkan.
    • Perangkat zRAM, yang memungkinkan partisi swap disimpan dalam memori dalam bentuk terkompresi (perangkat blok dibuat dalam memori tempat pertukaran dilakukan dengan kompresi), mengimplementasikan kemampuan untuk mengemas ulang halaman menggunakan algoritma alternatif untuk mencapai tingkat yang lebih tinggi kompresi. Ide utamanya adalah untuk memberikan pilihan antara beberapa algoritma (lzo, lzo-rle, lz4, lz4hc, zstd), menawarkan kompromi mereka sendiri antara kecepatan kompresi/dekompresi dan tingkat kompresi, atau optimal dalam situasi khusus (misalnya, untuk kompresi besar halaman memori).
    • Menambahkan API "iommufd" untuk mengelola sistem manajemen memori I/O - IOMMU (Unit Manajemen Memori I/O) dari ruang pengguna. API baru memungkinkan pengelolaan tabel halaman memori I/O menggunakan deskriptor file.
    • BPF menyediakan kemampuan untuk membuat tipe, mendefinisikan objek Anda sendiri, membangun hierarki objek Anda sendiri, dan secara fleksibel membuat struktur data Anda sendiri, seperti daftar tertaut. Untuk program BPF yang memasuki mode tidur (BPF_F_SLEEPABLE), dukungan untuk kunci bpf_rcu_read_{,un}lock() telah ditambahkan. Dukungan yang diterapkan untuk menyimpan objek task_struct. Menambahkan jenis peta BPF_MAP_TYPE_CGRP_STORAGE, menyediakan penyimpanan lokal untuk cgroup.
    • Untuk mekanisme pemblokiran RCU (Baca-salin-perbarui), mekanisme opsional panggilan balik “malas” diterapkan, di mana beberapa panggilan balik diproses sekaligus menggunakan pengatur waktu dalam mode batch. Penerapan pengoptimalan yang diusulkan memungkinkan kami mengurangi konsumsi daya pada perangkat Android dan ChromeOS sebesar 5-10% dengan menunda permintaan RCU selama waktu idle atau beban rendah pada sistem.
    • Menambahkan sysctl split_lock_mitigate untuk mengontrol bagaimana sistem bereaksi ketika mendeteksi kunci terpisah yang terjadi saat mengakses data yang tidak selaras di memori karena data melewati dua baris cache CPU saat menjalankan instruksi atom. Penyumbatan tersebut menyebabkan penurunan kinerja yang signifikan. Menyetel split_lock_mitigate ke 0 hanya mengeluarkan peringatan bahwa ada masalah, sedangkan menyetel split_lock_mitigate ke 1 juga menyebabkan proses yang menyebabkan kunci diperlambat untuk menjaga kinerja seluruh sistem.
    • Implementasi baru qspinlock telah diusulkan untuk arsitektur PowerPC, yang menunjukkan kinerja lebih tinggi dan memecahkan beberapa masalah penguncian yang muncul dalam kasus luar biasa.
    • Kode penanganan interupsi MSI (Message-Signaled Interrupts) telah dikerjakan ulang, menghilangkan akumulasi masalah arsitektur dan menambahkan dukungan untuk mengikat masing-masing penangan ke perangkat yang berbeda.
    • Untuk sistem berdasarkan arsitektur set instruksi LoongArch yang digunakan pada prosesor Loongson 3 5000 dan mengimplementasikan RISC ISA baru, mirip dengan MIPS dan RISC-V, dukungan untuk ftrace, perlindungan tumpukan, mode tidur dan siaga diterapkan.
    • Kemampuan untuk menetapkan nama ke area memori anonim bersama telah disediakan (sebelumnya nama hanya dapat diberikan ke memori anonim pribadi yang ditugaskan untuk proses tertentu).
    • Menambahkan parameter baris perintah kernel baru “trace_trigger”, yang dirancang untuk mengaktifkan pemicu jejak yang digunakan untuk mengikat perintah kondisional yang dipanggil ketika pemeriksaan kontrol dipicu (misalnya, trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Persyaratan untuk versi paket binutils telah ditingkatkan. Membangun kernel sekarang memerlukan setidaknya binutils 2.25.
    • Saat memanggil exec(), kemampuan untuk menempatkan proses dalam namespace waktu, yang waktunya berbeda dari waktu sistem, telah ditambahkan.
    • Kami telah mulai mentransfer fungsionalitas tambahan dari cabang Rust-for-Linux terkait dengan penggunaan bahasa Rust sebagai bahasa kedua untuk mengembangkan driver dan modul kernel. Dukungan Rust dinonaktifkan secara default dan tidak mengakibatkan Rust disertakan sebagai dependensi build kernel yang diperlukan. Fungsi dasar yang ditawarkan dalam rilis terakhir diperluas untuk mendukung kode tingkat rendah, seperti tipe Vec dan makro pr_debug!(), pr_cont!() dan pr_alert!(), serta makro prosedural “#[vtable ]”, yang menyederhanakan bekerja dengan tabel penunjuk pada fungsi. Penambahan pengikatan Rust tingkat tinggi pada subsistem kernel, yang memungkinkan pembuatan driver lengkap di Rust, diharapkan pada rilis mendatang.
    • Tipe "char" yang digunakan di kernel sekarang dinyatakan tidak ditandatangani secara default untuk semua arsitektur.
    • Mekanisme alokasi memori pelat - SLOB (slab allocator), yang dirancang untuk sistem dengan jumlah memori kecil, telah dinyatakan usang. Daripada SLOB, pada kondisi normal disarankan menggunakan SLUB atau SLAB. Untuk sistem dengan jumlah memori yang kecil, disarankan untuk menggunakan SLUB dalam mode SLUB_TINY.
  • Subsistem Disk, I/O dan Sistem File
    • Perbaikan telah dilakukan pada Btrfs yang bertujuan untuk memperbaiki masalah “lubang tulis” dalam implementasi RAID 5/6 (upaya memulihkan RAID jika terjadi kerusakan saat menulis dan tidak mungkin untuk memahami blok mana pada perangkat RAID mana yang ditulis dengan benar, yang dapat menyebabkan kehancuran blok, sesuai dengan blok yang ditanggung). Selain itu, SSD kini secara otomatis mengaktifkan operasi pembuangan asinkron secara default jika memungkinkan, sehingga memungkinkan peningkatan kinerja karena pengelompokan operasi pembuangan yang efisien ke dalam antrean dan pemrosesan antrean oleh prosesor latar belakang. Peningkatan kinerja operasi kirim dan lseek, serta FIEMAP ioctl.
    • Kemampuan untuk mengelola penulisan yang ditangguhkan (penulisan balik, penyimpanan data yang diubah di latar belakang) untuk perangkat blok telah diperluas. Dalam beberapa situasi, seperti saat menggunakan perangkat blok jaringan atau drive USB, penulisan yang lambat dapat mengakibatkan konsumsi RAM yang besar. Untuk mengontrol perilaku penulisan lambat dan menjaga ukuran cache halaman dalam batas tertentu, parameter baru strict_limit, min_bytes, max_bytes, min_ratio_fine dan max_ratio_fine telah diperkenalkan di sysfs (/sys/class/bdi/).
    • Sistem file F2FS mengimplementasikan operasi penggantian atom ioctl, yang memungkinkan Anda menulis data ke file dalam satu operasi atom. F2FS juga menambahkan cache tingkat blok untuk membantu mengidentifikasi data yang digunakan secara aktif atau data yang sudah lama tidak diakses.
    • Di FS ext4 hanya koreksi kesalahan yang dicatat.
    • Sistem file ntfs3 menawarkan beberapa opsi pemasangan baru: “nocase” untuk mengontrol sensitivitas huruf besar/kecil dalam nama file dan direktori; windows_name untuk melarang pembuatan nama file yang mengandung karakter yang tidak valid untuk Windows; hide_dot_files untuk mengontrol penetapan label file tersembunyi untuk file yang dimulai dengan titik.
    • Sistem file Squashfs mengimplementasikan opsi pemasangan “threads=” yang memungkinkan Anda menentukan jumlah thread untuk memparalelkan operasi dekompresi. Squashfs juga memperkenalkan kemampuan untuk memetakan ID pengguna dari sistem file yang dipasang, digunakan untuk mencocokkan file pengguna tertentu pada partisi asing yang dipasang dengan pengguna lain di sistem saat ini.
    • Penerapan daftar kontrol akses POSIX (POSIX ACL) telah dikerjakan ulang. Implementasi baru ini menghilangkan masalah arsitektur, menyederhanakan pemeliharaan basis kode, dan memperkenalkan tipe data yang lebih aman.
    • Subsistem fscrypt, yang digunakan untuk enkripsi file dan direktori secara transparan, telah menambahkan dukungan untuk algoritma enkripsi SM4 (standar Cina GB/T 32907-2016).
    • Kemampuan untuk membangun kernel tanpa dukungan NFSv2 telah disediakan (di masa depan mereka berencana untuk berhenti mendukung NFSv2 sepenuhnya).
    • Organisasi pemeriksaan hak akses ke perangkat NVMe telah diubah. Memberikan kemampuan membaca dan menulis ke perangkat NVMe jika proses penulisan memiliki akses ke file khusus perangkat (sebelumnya proses tersebut harus memiliki izin CAP_SYS_ADMIN).
    • Menghapus driver paket CD/DVD, yang tidak digunakan lagi pada tahun 2016.
  • Virtualisasi dan Keamanan
    • Metode perlindungan baru terhadap kerentanan Retbleed telah diterapkan di CPU Intel dan AMD, menggunakan pelacakan kedalaman panggilan, yang tidak memperlambat pekerjaan sebanyak perlindungan yang ada sebelumnya terhadap Retbleed. Untuk mengaktifkan mode baru, parameter baris perintah kernel “rebleed=stuff” telah diusulkan.
    • Menambahkan mekanisme perlindungan aliran instruksi FineIBT hibrid, menggabungkan penggunaan instruksi perangkat keras Intel IBT (Pelacakan Cabang Tidak Langsung) dan perlindungan perangkat lunak kCFI (kernel Control Flow Integrity) untuk memblokir pelanggaran urutan eksekusi normal (aliran kontrol) sebagai akibat dari penggunaan eksploitasi yang mengubah pointer yang disimpan dalam memori pada fungsi. FineIBT mengizinkan eksekusi dengan lompatan tidak langsung hanya jika terjadi lompatan ke instruksi ENDBR, yang ditempatkan di awal fungsi. Selain itu, dengan analogi mekanisme kCFI, hash kemudian diperiksa untuk menjamin kekekalan pointer.
    • Menambahkan pembatasan untuk memblokir serangan yang memanipulasi pembuatan status "oops", setelah itu tugas yang bermasalah diselesaikan dan status dipulihkan tanpa menghentikan sistem. Dengan jumlah panggilan yang sangat besar ke status "oops", terjadi kelebihan penghitung referensi (refcount), yang memungkinkan eksploitasi kerentanan yang disebabkan oleh dereferensi penunjuk NULL. Untuk melindungi terhadap serangan tersebut, batas telah ditambahkan ke kernel untuk jumlah maksimum pemicu "oops", setelah terlampaui, kernel akan memulai transisi ke keadaan "panik" diikuti dengan reboot, yang tidak akan memungkinkan tercapainya serangan tersebut. jumlah iterasi yang diperlukan untuk melebihi penghitungan ulang. Secara default, batasnya diatur ke 10 ribu "oops", tetapi jika diinginkan, dapat diubah melalui parameter oops_limit.
    • Menambahkan parameter konfigurasi LEGACY_TIOCSTI dan sysctl legacy_tiocsti untuk menonaktifkan kemampuan memasukkan data ke terminal menggunakan ioctl TIOCSTI, karena fungsi ini dapat digunakan untuk mengganti karakter arbitrer ke dalam buffer input terminal dan mensimulasikan input pengguna.
    • Jenis struktur internal baru, encoded_page, diusulkan, di mana bit-bit yang lebih rendah dari pointer digunakan untuk menyimpan informasi tambahan yang digunakan untuk melindungi terhadap dereferensi pointer yang tidak disengaja (jika dereferensi benar-benar diperlukan, bit-bit tambahan ini harus dibersihkan terlebih dahulu) .
    • Pada platform ARM64, pada tahap boot, dimungkinkan untuk mengaktifkan atau menonaktifkan implementasi perangkat lunak dari mekanisme Shadow Stack, yang digunakan untuk melindungi dari penimpaan alamat pengirim dari suatu fungsi jika terjadi buffer overflow pada stack ( inti dari perlindungan adalah menyimpan alamat pengirim dalam tumpukan “bayangan” terpisah setelah kontrol ditransfer ke fungsi dan mengambil alamat yang diberikan sebelum keluar dari fungsi). Dukungan untuk implementasi perangkat keras dan perangkat lunak Shadow Stack dalam satu rakitan kernel memungkinkan Anda untuk menggunakan satu kernel pada sistem ARM yang berbeda, terlepas dari dukungannya terhadap instruksi otentikasi penunjuk. Dimasukkannya implementasi perangkat lunak dilakukan melalui substitusi instruksi yang diperlukan dalam kode selama pemuatan.
    • Menambahkan dukungan untuk menggunakan mekanisme pemberitahuan keluar asinkron pada prosesor Intel, yang memungkinkan pendeteksian serangan satu langkah pada kode yang dieksekusi di enclave SGX.
    • Serangkaian operasi diusulkan yang memungkinkan hypervisor mendukung permintaan dari sistem tamu Intel TDX (Trusted Domain Extensions).
    • Pengaturan pembuatan kernel RANDOM_TRUST_BOOTLOADER dan RANDOM_TRUST_CPU telah dihapus, mendukung opsi baris perintah yang sesuai random.trust_bootloader dan random.trust_cpu.
    • Mekanisme Landlock, yang memungkinkan Anda membatasi interaksi sekelompok proses dengan lingkungan eksternal, telah menambahkan dukungan untuk flag LANDLOCK_ACCESS_FS_TRUNCATE, yang memungkinkan untuk mengontrol pelaksanaan operasi pemotongan file.
  • Subsistem jaringan
    • Untuk IPv6, dukungan untuk PLB (Protective Load Balancing) telah ditambahkan, yaitu mekanisme penyeimbangan beban antar link jaringan yang bertujuan untuk mengurangi titik kelebihan beban pada switch pusat data. Dengan mengubah Label Aliran IPv6, PLB secara acak mengubah jalur paket untuk menyeimbangkan beban pada port switch. Untuk mengurangi pemesanan ulang paket, operasi ini dilakukan setelah periode idle bila memungkinkan. Penggunaan PLB di pusat data Google telah mengurangi ketidakseimbangan beban pada port switch rata-rata sebesar 60%, mengurangi kehilangan paket sebesar 33%, dan mengurangi latensi sebesar 20%.
    • Menambahkan driver untuk perangkat MediaTek yang mendukung Wi-Fi 7 (802.11be).
    • Menambahkan dukungan untuk tautan 800 gigabit.
    • Menambahkan kemampuan untuk mengganti nama antarmuka jaringan dengan cepat, tanpa menghentikan pekerjaan.
    • Penyebutan alamat IP tujuan paket tiba telah ditambahkan ke pesan log tentang banjir SYN.
    • Untuk UDP, kemampuan untuk menggunakan tabel hash terpisah untuk namespace jaringan yang berbeda telah diterapkan.
    • Untuk jembatan jaringan, dukungan untuk metode otentikasi MAB (MAC Authentication Bypass) telah diterapkan.
    • Untuk protokol CAN (CAN_RAW), dukungan untuk mode soket SO_MARK telah diterapkan untuk memasang filter lalu lintas berbasis fwmark.
    • ipset mengimplementasikan parameter bitmask baru yang memungkinkan Anda menyetel mask berdasarkan bit arbitrer di alamat IP (misalnya, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Menambahkan dukungan untuk memproses header internal di dalam paket yang disalurkan ke nf_tables.
  • Оборудование
    • Subsistem “accel” telah ditambahkan dengan implementasi kerangka akselerator komputasi, yang dapat disediakan baik dalam bentuk ASIC individual atau dalam bentuk blok IP di dalam SoC dan GPU. Akselerator ini terutama ditujukan untuk mempercepat solusi masalah pembelajaran mesin.
    • Driver amdgpu mencakup dukungan untuk komponen GC, PSP, SMU dan NBIO IP. Untuk sistem ARM64, dukungan untuk DCN (Display Core Next) diterapkan. Implementasi keluaran layar terlindungi telah dipindahkan dari penggunaan DCN10 ke DCN21 dan sekarang dapat digunakan saat menghubungkan beberapa layar.
    • Driver i915 (Intel) telah menstabilkan dukungan untuk kartu video Intel Arc (DG2/Alchemist) diskrit.
    • Driver Nouveau mendukung GPU NVIDIA GA102 (RTX 30) berdasarkan arsitektur Ampere. Untuk kartu nva3 (GT215), kemampuan untuk mengontrol lampu latar telah ditambahkan.
    • Menambahkan dukungan untuk adaptor nirkabel berdasarkan chip Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) dan MediaTek MT7996, antarmuka Bluetooth Broadcom BCM4377/4378/4387, serta pengontrol Ethernet Motorcomm yt8521 dan NVIDIA Tegra GE.
    • Menambahkan dukungan ASoC (ALSA System on Chip) untuk chip suara internal HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Menambahkan dukungan untuk antarmuka audio Focusrite Saffire Pro 40. Menambahkan codec audio Realtek RT1318.
    • Menambahkan dukungan untuk smartphone dan tablet Sony (Xperia 10 IV, 5 IV, X dan X compact, OnePlus One, 3, 3T dan Nord N100, Xiaomi Poco F1 dan Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Menambahkan dukungan untuk ARM SoC dan Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695) papan, SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Pada saat yang sama, Yayasan Perangkat Lunak Bebas Amerika Latin membentuk versi kernel 6.2 yang sepenuhnya gratis - Linux-libre 6.2-gnu, dibersihkan dari elemen firmware dan driver yang berisi komponen atau bagian kode berpemilik, yang cakupannya dibatasi oleh pabrikan. Rilis baru membersihkan gumpalan baru di driver nouveau. Pemuatan blob dinonaktifkan di driver mt7622, ​​​​wi-fi mt7996, dan bluetooth bcm4377. Membersihkan nama blob dalam file dts untuk arsitektur Aarch64. Kode pembersihan gumpalan diperbarui di berbagai driver dan subsistem. Berhenti membersihkan driver s5k4ecgx karena telah dihapus dari kernel.

Sumber: opennet.ru

Tambah komentar