Keluaran kernel Linux 6.2

Selepas dua bulan pembangunan, Linus Torvalds membentangkan keluaran kernel Linux 6.2. Antara perubahan yang paling ketara: penerimaan kod di bawah lesen Copyleft-Next dibenarkan, pelaksanaan RAID5/6 dalam Btrfs dipertingkatkan, penyepaduan sokongan untuk bahasa Rust diteruskan, overhed perlindungan terhadap serangan Retbleed dikurangkan, keupayaan untuk mengawal penggunaan memori semasa tulis balik ditambah, mekanisme ditambah untuk mengimbangi TCP PLB (Pengimbangan Beban Perlindungan), mekanisme perlindungan aliran arahan hibrid (FineIBT) telah ditambah, BPF kini mempunyai keupayaan untuk menentukan objek dan struktur datanya sendiri , utiliti rv (Pengesahan Masa Jalan) disertakan, penggunaan kuasa dalam pelaksanaan kunci RCU telah dikurangkan.

Versi baharu termasuk 16843 pembaikan daripada 2178 pembangun, saiz tampalan ialah 62 MB (perubahan mempengaruhi 14108 fail, 730195 baris kod telah ditambah, 409485 baris telah dipadamkan). Kira-kira 42% daripada semua perubahan yang diperkenalkan dalam 6.2 adalah berkaitan dengan pemacu peranti, kira-kira 16% perubahan berkaitan dengan pengemaskinian kod khusus untuk seni bina perkakasan, 12% berkaitan dengan susunan rangkaian, 4% berkaitan dengan sistem fail dan 3% adalah berkaitan dengan subsistem kernel dalaman.

Inovasi utama dalam kernel 6.2:

  • Perkhidmatan memori dan sistem
    • Ia dibenarkan untuk memasukkan ke dalam kod kernel dan perubahan yang disediakan di bawah lesen Copyleft-Next 0.3.1. Lesen Copyleft-Next dicipta oleh salah seorang pengarang GPLv3 dan serasi sepenuhnya dengan lesen GPLv2, seperti yang disahkan oleh peguam dari SUSE dan Red Hat. Berbanding dengan GPLv2, lesen Copyleft-Next adalah jauh lebih padat dan lebih mudah difahami (bahagian pengenalan dan sebutan tentang kompromi lapuk telah dialih keluar), mentakrifkan tempoh masa dan prosedur untuk menghapuskan pelanggaran dan secara automatik mengalih keluar keperluan copyleft untuk perisian lapuk yang berumur lebih daripada 15 tahun.

      Copyleft-Next juga mengandungi klausa pemberian teknologi proprietari, yang, tidak seperti GPLv2, menjadikan lesen ini serasi dengan lesen Apache 2.0. Untuk memastikan keserasian penuh dengan GPLv2, Copyleft-Next dengan jelas menyatakan bahawa karya terbitan boleh disediakan di bawah lesen GPL sebagai tambahan kepada lesen Copyleft-Next yang asal.

    • Struktur ini termasuk utiliti "rv", yang menyediakan antara muka untuk interaksi dari ruang pengguna dengan pengendali subsistem RV (Pengesahan Masa Jalan), direka untuk menyemak operasi yang betul pada sistem yang sangat dipercayai yang menjamin ketiadaan kegagalan. Pengesahan dilakukan pada masa jalan dengan melampirkan pengendali pada titik jejak yang menyemak kemajuan pelaksanaan sebenar terhadap model penentu rujukan yang telah ditetapkan bagi mesin yang mentakrifkan gelagat sistem yang dijangkakan.
    • Peranti zRAM, yang membolehkan partition swap disimpan dalam ingatan dalam bentuk termampat (peranti blok dicipta dalam ingatan yang pertukaran dilakukan dengan mampatan), melaksanakan keupayaan untuk membungkus semula halaman menggunakan algoritma alternatif untuk mencapai tahap yang lebih tinggi daripada pemampatan. Idea utama adalah untuk menyediakan pilihan antara beberapa algoritma (lzo, lzo-rle, lz4, lz4hc, zstd), menawarkan kompromi mereka sendiri antara kelajuan mampatan/penyahmampatan dan tahap mampatan, atau optimum dalam situasi khas (contohnya, untuk memampatkan besar halaman ingatan).
    • Menambahkan API "iommufd" untuk mengurus sistem pengurusan memori I/O - IOMMU (Unit Pengurusan Memori I/O) dari ruang pengguna. API baharu memungkinkan untuk mengurus jadual halaman memori I/O menggunakan deskriptor fail.
    • BPF menyediakan keupayaan untuk mencipta jenis, mentakrifkan objek anda sendiri, membina hierarki objek anda sendiri dan membuat struktur data anda sendiri secara fleksibel, seperti senarai terpaut. Untuk program BPF yang masuk ke mod tidur (BPF_F_SLEEPABLE), sokongan untuk kunci bpf_rcu_read_{,un}lock() telah ditambahkan. Sokongan yang dilaksanakan untuk menyimpan objek task_struct. Menambahkan jenis peta BPF_MAP_TYPE_CGRP_STORAGE, menyediakan storan setempat untuk cgroup.
    • Untuk mekanisme penyekatan RCU (Baca-salinan-kemas kini), mekanisme pilihan panggilan balik "malas" dilaksanakan, di mana beberapa panggilan panggil balik diproses sekali gus menggunakan pemasa dalam mod kelompok. Aplikasi pengoptimuman yang dicadangkan membolehkan kami mengurangkan penggunaan kuasa pada peranti Android dan ChromeOS sebanyak 5-10% dengan menangguhkan permintaan RCU semasa masa melahu atau beban rendah pada sistem.
    • Menambahkan sysctl split_lock_mitigate untuk mengawal cara sistem bertindak balas apabila ia mengesan kunci berpecah yang berlaku apabila mengakses data tidak sejajar dalam ingatan disebabkan oleh data yang melintasi dua baris cache CPU apabila melaksanakan arahan atom. Sekatan sedemikian membawa kepada penurunan prestasi yang ketara. Menetapkan split_lock_mitigate kepada 0 hanya mengeluarkan amaran bahawa terdapat masalah, manakala menetapkan split_lock_mitigate kepada 1 juga menyebabkan proses yang menyebabkan kunci diperlahankan untuk mengekalkan prestasi untuk seluruh sistem.
    • Pelaksanaan baru qspinlock telah dicadangkan untuk seni bina PowerPC, yang menunjukkan prestasi yang lebih tinggi dan menyelesaikan beberapa masalah penguncian yang timbul dalam kes luar biasa.
    • Kod pengendalian gangguan MSI (Message-Signal Interrupts) telah diolah semula, menghapuskan masalah seni bina terkumpul dan menambah sokongan untuk mengikat pengendali individu pada peranti yang berbeza.
    • Untuk sistem berdasarkan seni bina set arahan LoongArch yang digunakan dalam pemproses Loongson 3 5000 dan melaksanakan RISC ISA baharu, serupa dengan MIPS dan RISC-V, sokongan untuk mod ftrace, perlindungan tindanan, tidur dan siap sedia dilaksanakan.
    • Keupayaan untuk memberikan nama kepada kawasan memori tanpa nama yang dikongsi telah disediakan (sebelum ini nama hanya boleh diberikan kepada memori tanpa nama persendirian yang diberikan kepada proses tertentu).
    • Menambahkan parameter baris arahan kernel baharu β€œtrace_trigger”, direka untuk mengaktifkan pencetus jejak yang digunakan untuk mengikat arahan bersyarat yang dipanggil apabila semakan kawalan dicetuskan (contohnya, trace_trigger=”sched_switch.stacktrace jika prev_state == 2β€³).
    • Keperluan untuk versi pakej binutils telah ditingkatkan. Membina kernel kini memerlukan sekurang-kurangnya binutil 2.25.
    • Apabila memanggil exec(), keupayaan untuk meletakkan proses dalam ruang nama masa, di mana masa berbeza daripada masa sistem, telah ditambah.
    • Kami telah mula memindahkan fungsi tambahan daripada cawangan Rust-for-Linux yang berkaitan dengan penggunaan bahasa Rust sebagai bahasa kedua untuk membangunkan modul pemacu dan kernel. Sokongan Rust dilumpuhkan secara lalai dan tidak menyebabkan Rust disertakan sebagai pergantungan binaan kernel yang diperlukan. Kefungsian asas yang ditawarkan dalam keluaran terakhir dikembangkan untuk menyokong kod peringkat rendah, seperti jenis Vec dan makro pr_debug!(), pr_cont!() dan pr_alert!(), serta makro prosedur "#[vtable ]", yang memudahkan kerja dengan jadual penunjuk pada fungsi. Penambahan pengikatan Rust peringkat tinggi ke atas subsistem kernel, yang akan membolehkan penciptaan pemacu sepenuhnya dalam Rust, dijangka dalam keluaran akan datang.
    • Jenis "char" yang digunakan dalam kernel kini diisytiharkan tidak ditandatangani secara lalai untuk semua seni bina.
    • Mekanisme peruntukan memori papak - SLOB (pengumpuk papak), yang direka untuk sistem dengan jumlah memori yang kecil, telah diisytiharkan usang. Daripada SLOB, dalam keadaan biasa adalah disyorkan untuk menggunakan SLUB atau SLAB. Untuk sistem dengan jumlah memori yang kecil, disyorkan untuk menggunakan SLUB dalam mod SLUB_TINY.
  • Subsistem cakera, I/O dan sistem fail
    • Penambahbaikan telah dibuat pada Btrfs bertujuan untuk menyelesaikan masalah "lubang tulis" dalam pelaksanaan RAID 5/6 (percubaan untuk memulihkan RAID jika ranap berlaku semasa menulis dan adalah mustahil untuk memahami blok mana pada peranti RAID ditulis dengan betul, yang boleh membawa kepada pemusnahan blok, sepadan dengan blok yang diunderait). Di samping itu, SSD kini secara automatik mendayakan operasi buang tak segerak secara lalai apabila boleh, membolehkan prestasi yang lebih baik disebabkan pengumpulan cekap operasi buang ke dalam baris gilir dan pemprosesan baris gilir oleh pemproses latar belakang. Prestasi yang lebih baik bagi operasi hantar dan cari, serta FIEMAP ioctl.
    • Keupayaan untuk menguruskan penulisan tertunda (tulis balik, penjimatan latar belakang data yang diubah) untuk peranti blok telah diperluaskan. Dalam sesetengah situasi, seperti semasa menggunakan peranti blok rangkaian atau pemacu USB, penulisan malas boleh mengakibatkan penggunaan RAM yang besar. Untuk mengawal tingkah laku penulisan malas dan mengekalkan saiz cache halaman dalam had tertentu, parameter baharu strict_limit, min_bait, max_bait, min_ratio_fine dan max_ratio_fine telah diperkenalkan dalam sysfs (/sys/class/bdi/).
    • Sistem fail F2FS melaksanakan operasi atomic replace ioctl, yang membolehkan anda menulis data ke fail dalam satu operasi atom. F2FS juga menambah cache takat blok untuk membantu mengenal pasti data yang digunakan secara aktif atau data yang tidak diakses untuk masa yang lama.
    • Dalam ext4 FS hanya pembetulan ralat dicatatkan.
    • Sistem fail ntfs3 menawarkan beberapa pilihan pemasangan baharu: "nocase" untuk mengawal sensitiviti huruf besar dalam nama fail dan direktori; windows_name untuk melarang penciptaan nama fail yang mengandungi aksara yang tidak sah untuk Windows; hide_dot_files untuk mengawal penetapan label fail tersembunyi untuk fail yang bermula dengan titik.
    • Sistem fail Squashfs melaksanakan pilihan pelekap "benang =", yang membolehkan anda menentukan bilangan utas untuk menyelaraskan operasi penyahmampatan. Squashfs juga memperkenalkan keupayaan untuk memetakan ID pengguna sistem fail yang dipasang, digunakan untuk memadankan fail pengguna tertentu pada partition asing yang dipasang dengan pengguna lain pada sistem semasa.
    • Pelaksanaan senarai kawalan akses POSIX (POSIX ACL) telah diolah semula. Pelaksanaan baharu menghapuskan isu seni bina, memudahkan penyelenggaraan pangkalan kod dan memperkenalkan jenis data yang lebih selamat.
    • Subsistem fscrypt, yang digunakan untuk penyulitan telus bagi fail dan direktori, telah menambah sokongan untuk algoritma penyulitan SM4 (standard Cina GB/T 32907-2016).
    • Keupayaan untuk membina kernel tanpa sokongan NFSv2 telah disediakan (pada masa hadapan mereka merancang untuk berhenti sepenuhnya menyokong NFSv2).
    • Organisasi menyemak hak akses kepada peranti NVMe telah diubah. Menyediakan keupayaan untuk membaca dan menulis ke peranti NVMe jika proses penulisan mempunyai akses kepada fail khusus peranti (sebelum ini proses itu perlu mempunyai kebenaran CAP_SYS_ADMIN).
    • Mengalih keluar pemacu pakej CD/DVD, yang telah ditamatkan pada tahun 2016.
  • Maya dan Keselamatan
    • Kaedah perlindungan baharu terhadap kerentanan Retbleed telah dilaksanakan dalam CPU Intel dan AMD, menggunakan penjejakan kedalaman panggilan, yang tidak melambatkan kerja seperti perlindungan yang ada sebelum ini terhadap Retbleed. Untuk mendayakan mod baharu, parameter baris arahan kernel "retbleed=stuff" telah dicadangkan.
    • Menambah mekanisme perlindungan aliran arahan FineIBT hibrid, menggabungkan penggunaan perkakasan Intel IBT (Penjejakan Cawangan Tidak Langsung) dan perlindungan perisian kCFI (Integriti Aliran Kawalan Kernel) untuk menyekat pelanggaran perintah pelaksanaan biasa (aliran kawalan) akibat penggunaan eksploitasi yang mengubah suai penunjuk yang disimpan dalam ingatan pada fungsi. FineIBT membenarkan pelaksanaan melalui lompatan tidak langsung hanya dalam kes lompatan ke arahan ENDBR, yang diletakkan pada permulaan fungsi. Selain itu, dengan analogi dengan mekanisme kCFI, cincang kemudiannya diperiksa untuk menjamin kebolehubahan penunjuk.
    • Menambahkan sekatan untuk menyekat serangan yang memanipulasi penjanaan keadaan "oops", selepas itu tugas bermasalah diselesaikan dan keadaan dipulihkan tanpa menghentikan sistem. Dengan bilangan panggilan yang sangat besar ke keadaan "oops", limpahan kaunter rujukan berlaku (refcount), yang membenarkan eksploitasi kelemahan yang disebabkan oleh penolakan penunjuk NULL. Untuk melindungi daripada serangan sedemikian, had telah ditambahkan pada kernel untuk bilangan maksimum pencetus "ops", selepas melebihi itu kernel akan memulakan peralihan kepada keadaan "panik" diikuti dengan but semula, yang tidak akan membenarkan mencapai bilangan lelaran yang diperlukan untuk melimpahi kiraan semula. Secara lalai, had ditetapkan kepada 10 ribu "oops", tetapi jika dikehendaki, ia boleh ditukar melalui parameter oops_limit.
    • Menambahkan parameter konfigurasi LEGACY_TIOCSTI dan sysctl legacy_tiocsti untuk melumpuhkan keupayaan untuk meletakkan data ke dalam terminal menggunakan ioctl TIOCSTI, kerana fungsi ini boleh digunakan untuk menggantikan aksara sewenang-wenang ke dalam penimbal input terminal dan mensimulasikan input pengguna.
    • Jenis struktur dalaman baharu, encoded_page, dicadangkan, di mana bit bawah penuding digunakan untuk menyimpan maklumat tambahan yang digunakan untuk melindungi daripada penolakan penunjuk secara tidak sengaja (jika penyahrujukan sebenarnya perlu, bit tambahan ini mesti dikosongkan terlebih dahulu) .
    • Pada platform ARM64, pada peringkat but, adalah mungkin untuk mendayakan atau melumpuhkan pelaksanaan perisian mekanisme Shadow Stack, yang digunakan untuk melindungi daripada menimpa alamat pemulangan daripada fungsi sekiranya berlaku limpahan penimbal pada tindanan ( intipati perlindungan adalah untuk menyimpan alamat pemulangan dalam timbunan "bayangan" yang berasingan selepas kawalan dipindahkan ke fungsi dan mendapatkan semula alamat yang diberikan sebelum keluar dari fungsi). Sokongan untuk pelaksanaan perkakasan dan perisian Shadow Stack dalam satu pemasangan kernel membolehkan anda menggunakan satu kernel pada sistem ARM yang berbeza, tanpa mengira sokongan mereka untuk arahan untuk pengesahan penunjuk. Kemasukan pelaksanaan perisian dijalankan melalui penggantian arahan yang diperlukan dalam kod semasa memuatkan.
    • Sokongan tambahan untuk menggunakan mekanisme pemberitahuan keluar tak segerak pada pemproses Intel, yang membolehkan pengesanan serangan satu langkah pada kod yang dilaksanakan dalam enklaf SGX.
    • Satu set operasi dicadangkan yang membolehkan hypervisor menyokong permintaan daripada sistem tetamu Intel TDX (Trusted Domain Extensions).
    • Tetapan binaan kernel RANDOM_TRUST_BOOTLOADER dan RANDOM_TRUST_CPU telah dialih keluar, memihak kepada pilihan baris arahan yang sepadan random.trust_bootloader dan random.trust_cpu.
    • Mekanisme Landlock, yang membolehkan anda mengehadkan interaksi sekumpulan proses dengan persekitaran luaran, telah menambah sokongan untuk bendera LANDLOCK_ACCESS_FS_TRUNCATE, yang membolehkan anda mengawal pelaksanaan operasi pemotongan fail.
  • Subsistem rangkaian
    • Untuk IPv6, sokongan untuk PLB (Pengimbangan Beban Perlindungan) telah ditambah, mekanisme pengimbangan beban antara pautan rangkaian yang bertujuan untuk mengurangkan titik beban lampau pada suis pusat data. Dengan menukar Label Aliran IPv6, PLB secara rawak menukar laluan paket untuk mengimbangi beban pada port suis. Untuk mengurangkan penyusunan semula paket, operasi ini dilakukan selepas tempoh melahu apabila boleh. Penggunaan PLB dalam pusat data Google telah mengurangkan ketidakseimbangan beban pada port suis sebanyak purata 60%, mengurangkan kehilangan paket sebanyak 33% dan mengurangkan kependaman sebanyak 20%.
    • Pemacu tambahan untuk peranti MediaTek yang menyokong Wi-Fi 7 (802.11be).
    • Menambah sokongan untuk pautan 800-gigabit.
    • Menambah keupayaan untuk menamakan semula antara muka rangkaian dengan cepat, tanpa berhenti bekerja.
    • Sebutan alamat IP tempat paket tiba telah ditambahkan pada mesej log tentang banjir SYN.
    • Untuk UDP, keupayaan untuk menggunakan jadual cincang yang berasingan untuk ruang nama rangkaian yang berbeza telah dilaksanakan.
    • Untuk jambatan rangkaian, sokongan untuk kaedah pengesahan MAB (MAC Authentication Bypass) telah dilaksanakan.
    • Untuk protokol CAN (CAN_RAW), sokongan untuk mod soket SO_MARK telah dilaksanakan untuk melampirkan penapis trafik berasaskan fwmark.
    • ipset melaksanakan parameter bitmask baharu yang membolehkan anda menetapkan topeng berdasarkan bit sewenang-wenang dalam alamat IP (contohnya, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Menambah sokongan untuk memproses pengepala dalaman di dalam paket terowong ke nf_tables.
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Subsistem "accel" telah ditambah dengan pelaksanaan rangka kerja untuk pemecut pengiraan, yang boleh dibekalkan sama ada dalam bentuk ASIC individu atau dalam bentuk blok IP di dalam SoC dan GPU. Pemecut ini terutamanya bertujuan untuk mempercepatkan penyelesaian masalah pembelajaran mesin.
    • Pemacu amdgpu termasuk sokongan untuk komponen IP GC, PSP, SMU dan NBIO. Untuk sistem ARM64, sokongan untuk DCN (Display Core Next) dilaksanakan. Pelaksanaan output skrin yang dilindungi telah dialihkan daripada menggunakan DCN10 kepada DCN21 dan kini boleh digunakan apabila menyambungkan berbilang skrin.
    • Pemacu i915 (Intel) telah menstabilkan sokongan untuk kad video Intel Arc (DG2/Alchemist) diskret.
    • Pemacu Nouveau menyokong GPU NVIDIA GA102 (RTX 30) berdasarkan seni bina Ampere. Untuk kad nva3 (GT215), keupayaan untuk mengawal lampu latar telah ditambah.
    • Sokongan tambahan untuk penyesuai wayarles berdasarkan Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) dan cip MediaTek MT7996, Broadcom BCM4377/4378/4387 antara muka Bluetooth, serta pengawal Motorcomm yt GE8521.
    • Menambahkan sokongan ASoC (ALSA System on Chip) untuk cip bunyi terbina dalam HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Menambah sokongan untuk antara muka audio Focusrite Saffire Pro 40. Menambah codec audio Realtek RT1318.
    • Sokongan tambahan untuk telefon pintar 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.
    • Sokongan tambahan 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) papan , SDM695 (Snapdragon 670), MSM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), RK650 Odroid-Go/rg3326, Zyxel NSA351S, InnoComm i.MX310MM, Odroid Go Ultra.

Pada masa yang sama, Yayasan Perisian Percuma Amerika Latin membentuk versi kernel percuma sepenuhnya 6.2 - Linux-libre 6.2-gnu, dibersihkan daripada elemen perisian tegar dan pemacu yang mengandungi komponen proprietari atau bahagian kod, yang skopnya dihadkan oleh Pengeluar. Keluaran baharu membersihkan gumpalan baharu dalam pemandu nouveau. Pemuatan blob dilumpuhkan dalam pemacu bluetooth mt7622, ​​​​mt7996 wifi dan bcm4377. Membersihkan nama gumpalan dalam fail dts untuk seni bina Aarch64. Kod pembersihan gumpalan dikemas kini dalam pelbagai pemacu dan subsistem. Berhenti membersihkan pemacu s5k4ecgx, kerana ia telah dialih keluar daripada kernel.

Sumber: opennet.ru

Tambah komen