Keluaran kernel Linux 5.8

Selepas dua bulan pembangunan, Linus Torvalds diperkenalkan pelepasan kernel Linux 5.8. Antara perubahan yang paling ketara: pengesan keadaan perlumbaan KCSAN, mekanisme universal untuk menyampaikan pemberitahuan kepada ruang pengguna, sokongan perkakasan untuk penyulitan sebaris, mekanisme keselamatan yang dipertingkatkan untuk ARM64, sokongan untuk pemproses Baikal-T1 Rusia, keupayaan untuk memasang contoh procfs secara berasingan , pelaksanaan mekanisme keselamatan Shadow untuk ARM64 Call Stack dan BTI.

Kernel 5.8 menjadi yang terbesar dari segi bilangan perubahan semua kernel semasa keseluruhan kewujudan projek. Selain itu, perubahan itu tidak berkaitan dengan mana-mana subsistem, tetapi meliputi bahagian kernel yang berlainan dan terutamanya dikaitkan dengan kerja semula dan pembersihan dalaman. Perubahan terbesar dilihat pada pemandu. Versi baharu termasuk 17606 pembaikan daripada 2081 pembangun, yang menjejaskan kira-kira 20% daripada semua fail dalam repositori kod kernel. Saiz tampalan ialah 65 MB (perubahan mempengaruhi 16180 fail, 1043240 baris kod telah ditambahkan, 489854 baris telah dipadamkan). Sebagai perbandingan, cawangan 5.7 mempunyai 15033 pembaikan dan saiz tampung 39 MB. Kira-kira 37% daripada semua perubahan yang diperkenalkan dalam 5.8 adalah berkaitan dengan pemacu peranti, kira-kira 16% perubahan berkaitan dengan pengemaskinian kod khusus untuk seni bina perkakasan, 11% berkaitan dengan susunan rangkaian, 3% berkaitan dengan sistem fail dan 4% adalah berkaitan dengan subsistem kernel dalaman.

Utama inovasi:

  • Maya dan Keselamatan
    • Pemuatan modul kernel yang mempunyai bahagian dengan kod di mana bit yang membenarkan pelaksanaan dan penulisan ditetapkan secara serentak disediakan. Perubahan itu dilaksanakan sebagai sebahagian daripada projek yang lebih besar untuk menghapuskan kernel daripada penggunaan halaman memori yang membenarkan pelaksanaan dan penulisan serentak.
    • Kini mungkin untuk mencipta contoh procfs berasingan, membenarkan penggunaan berbilang titik lekap procfs, dipasang dengan pilihan yang berbeza, tetapi mencerminkan ruang nama pengecam proses yang sama (ruang nama pid). Sebelum ini, semua titik lekap procfs hanya mencerminkan satu perwakilan dalaman, dan sebarang perubahan pada parameter lekap mempengaruhi semua titik lekap lain yang dikaitkan dengan ruang nama ID proses yang sama. Antara kawasan di mana pemasangan dengan pilihan berbeza mungkin diperlukan ialah pelaksanaan pengasingan ringan untuk sistem terbenam dengan keupayaan untuk menyembunyikan jenis proses dan nod maklumat tertentu dalam procfs.
    • Sokongan untuk mekanisme telah dilaksanakan untuk platform ARM64
      Timbunan Panggilan Bayangan, disediakan oleh pengkompil Clang untuk melindungi daripada menulis ganti alamat pemulangan fungsi sekiranya limpahan penimbal tindanan. Intipati perlindungan adalah untuk menyimpan alamat pemulangan dalam timbunan "bayangan" yang berasingan selepas memindahkan kawalan ke fungsi dan mendapatkan semula alamat ini sebelum keluar dari fungsi.

    • Sokongan arahan telah ditambah untuk platform ARM64 ARMv8.5-BTI (Penunjuk Sasaran Cawangan) untuk melindungi pelaksanaan set arahan yang tidak sepatutnya bercabang. Menyekat peralihan kepada bahagian kod sewenang-wenangnya dilaksanakan untuk menghalang penciptaan alat dalam eksploitasi yang menggunakan teknik pengaturcaraan berorientasikan kembali (ROP - Pengaturcaraan Berorientasikan Kembali; penyerang tidak cuba meletakkan kodnya dalam ingatan, tetapi beroperasi pada kepingan sedia ada. arahan mesin yang berakhir dengan arahan kawalan pemulangan, dari mana rangkaian panggilan dibina untuk mendapatkan kefungsian yang diingini).
    • Menambah sokongan perkakasan untuk penyulitan sebaris peranti blok (Penyulitan Sebaris). Peranti penyulitan inlinep biasanya dibina ke dalam pemacu, tetapi terletak secara logik di antara memori sistem dan cakera, menyulitkan dan menyahsulit I/O secara telus berdasarkan kunci yang ditentukan kernel dan algoritma penyulitan.
    • Menambahkan pilihan baris arahan kernel "initrdmem" untuk membolehkan anda menentukan alamat memori fizikal initrd apabila meletakkan imej but awal dalam RAM.
    • Keupayaan baharu ditambahkan: CAP_PERFMON untuk mengakses subsistem perf dan melaksanakan pemantauan prestasi. CAP_BPF, yang membenarkan operasi BPF tertentu (seperti memuatkan program BPF) yang sebelum ini memerlukan hak CAP_SYS_ADMIN (hak CAP_SYS_ADMIN kini dibahagikan kepada gabungan CAP_BPF, CAP_PERFMON dan CAP_NET_ADMIN).
    • Ditambah oleh peranti virtio-mem baharu yang membolehkan anda memasang palam panas dan memori palam panas ke dalam sistem tetamu.
    • Mengimbas semula operasi pemetaan yang dilaksanakan dalam /dev/mem jika pemacu peranti menggunakan kawasan memori bertindih.
    • Perlindungan kerentanan tambahan CROSSTalk/SRBDS, yang membolehkan anda memulihkan hasil arahan tertentu yang dilaksanakan pada teras CPU lain.
  • Perkhidmatan memori dan sistem
    • Dalam dokumen yang mentakrifkan peraturan untuk memformat kod, diterima cadangan untuk penggunaan istilah inklusif. Pembangun tidak disyorkan untuk menggunakan gabungan 'tuan / hamba' dan 'senarai hitam / senarai putih', serta perkataan 'hamba' secara berasingan. Pengesyoran hanya berkenaan dengan penggunaan baharu istilah ini. Sebutan perkataan tertentu yang sudah wujud dalam inti akan kekal tidak disentuh. Dalam kod baharu, penggunaan istilah yang ditanda dibenarkan jika diperlukan untuk menyokong API dan ABI yang terdedah dalam ruang pengguna, serta semasa mengemas kini kod untuk menyokong perkakasan atau protokol sedia ada yang spesifikasinya memerlukan penggunaan istilah tertentu.
    • Alat nyahpepijat disertakan KCSAN (Kernel Concurrency Sanitizer), direka untuk pengesanan dinamik keadaan perlumbaan dalam inti. Penggunaan KCSAN disokong apabila membina dalam GCC dan Clang, dan memerlukan pengubahsuaian khas pada masa penyusunan untuk menjejaki akses memori (titik putus digunakan yang dicetuskan apabila memori dibaca atau diubah suai). Tumpuan pembangunan KCSAN adalah pada pencegahan positif palsu, skalabiliti dan kemudahan penggunaan.
    • Ditambah mekanisme universal menyampaikan pemberitahuan dari kernel ke ruang pengguna. Mekanisme ini berdasarkan pemacu paip standard dan membolehkan anda mengedarkan pemberitahuan daripada kernel dengan cekap melalui saluran yang dibuka dalam ruang pengguna. Titik penerimaan pemberitahuan ialah paip yang dibuka dalam mod khas dan membenarkan mesej yang diterima daripada kernel terkumpul dalam penimbal cincin. Pembacaan dilakukan oleh fungsi read() biasa. Pemilik saluran menentukan sumber dalam kernel yang perlu dipantau dan boleh menentukan penapis untuk mengabaikan jenis mesej dan acara tertentu. Daripada peristiwa, hanya operasi dengan kunci disokong pada masa ini, seperti menambah/mengalih keluar kunci dan menukar atributnya. Acara ini dirancang untuk digunakan dalam GNOME.
    • Pembangunan berterusan fungsi 'pidfd' untuk membantu mengendalikan situasi penggunaan semula PID (pidfd dikaitkan dengan proses tertentu dan tidak berubah, manakala PID boleh dikaitkan dengan proses lain selepas proses semasa yang dikaitkan dengan PID itu ditamatkan). Versi baharu menambah sokongan untuk menggunakan pidfd untuk melampirkan proses pada ruang nama (membenarkan pidfd ditentukan semasa melaksanakan panggilan sistem setns). Menggunakan pidfd membolehkan anda mengawal lampiran proses ke beberapa jenis ruang nama dengan satu panggilan, dengan ketara mengurangkan bilangan panggilan sistem yang diperlukan dan melaksanakan lampiran dalam mod atom (jika lampiran pada salah satu ruang nama gagal, yang lain tidak akan bersambung) .
    • Menambahkan panggilan sistem baharu faaccessat2(), berbeza daripada
      faaccess() hujah tambahan dengan bendera yang mematuhi pengesyoran POSIX (sebelum ini bendera ini dicontohi dalam pustaka C, dan faaccessat2 baharu membenarkannya untuk dilaksanakan dalam kernel).

    • Dalam Cgroup tambah tetapan memory.swap.high yang boleh digunakan untuk memperlahankan tugasan yang mengambil terlalu banyak ruang swap.
    • Ke antara muka I/O tak segerak io_uring menambah sokongan untuk panggilan sistem tee().
    • Mekanisme tambahan "lelaran BPF, direka untuk mengeluarkan kandungan struktur kernel kepada ruang pengguna.
    • Dengan syarat keupayaan untuk menggunakan penimbal cincin untuk pertukaran data antara program BPF.
    • Ke dalam mekanisme padata, direka untuk mengatur pelaksanaan tugasan selari dalam kernel, menambah sokongan untuk tugasan berbilang benang dengan pengimbangan beban.
    • Dalam mekanisme pstore, yang membolehkan anda menyimpan maklumat penyahpepijatan tentang punca ranap di kawasan memori yang tidak hilang antara but semula, tambah bahagian belakang untuk menyimpan maklumat untuk menyekat peranti.
    • Daripada cawangan kernel PREEMPT_RT tergerak pelaksanaan kunci tempatan.
    • Ditambah API peruntukan penimbal baharu (AF_XDP), bertujuan untuk memudahkan penulisan pemacu rangkaian dengan sokongan XDP (eXpress Data Path).
    • Untuk seni bina RISC-V, sokongan untuk menyahpepijat komponen kernel menggunakan KGDB telah dilaksanakan.
    • Sebelum mengeluarkan 4.8, keperluan untuk versi GCC yang boleh digunakan untuk membina kernel telah ditingkatkan. Dalam salah satu keluaran seterusnya ia dirancang untuk meningkatkan bar kepada GCC 4.9.
  • Subsistem cakera, I/O dan sistem fail
    • Dalam Pemeta Peranti tambah pengendali dm-ebs baharu (meniru saiz blok), yang boleh digunakan untuk meniru saiz blok logik yang lebih kecil (contohnya, untuk meniru sektor 512 bait pada cakera bersaiz sektor 4K).
    • Sistem fail F2FS kini menyokong pemampatan menggunakan algoritma LZO-RLE.
    • Dalam dm-crypt tambah sokongan untuk kunci yang disulitkan.
    • Btrfs telah menambah baik pengendalian operasi baca dalam mod I/O langsung. Apabila melekap dipercepatkan menyemak subseksyen dan direktori yang dipadam yang ditinggalkan tanpa ibu bapa.
    • Parameter "nodelete" telah ditambahkan pada CIFS, membenarkan semakan kebenaran biasa pada pelayan, tetapi melarang klien daripada memadamkan fail atau direktori.
    • Ext4 telah meningkatkan pengendalian ralat ENOSPC apabila menggunakan multithreading. xattr telah menambah sokongan untuk ruang nama gnu.* yang digunakan dalam GNU Hurd.
    • Untuk Ext4 dan XFS, sokongan untuk operasi DAX didayakan (akses terus ke sistem fail, memintas cache halaman tanpa menggunakan tahap peranti blok) berhubung dengan fail dan direktori individu.
    • Dalam panggilan sistem statx() bendera ditambah STATX_ATTR_DAX, yang apabila dinyatakan, mendapatkan semula maklumat menggunakan enjin DAX.
    • EXFAT tambah sokongan untuk pengesahan kawasan but.
    • Dalam FAT bertambah baik pemuatan proaktif elemen FS. Menguji pemacu USB 2TB yang perlahan menunjukkan pengurangan masa penyiapan ujian daripada 383 kepada 51 saat.
  • Subsistem rangkaian
    • Dalam kod untuk mengawal operasi jambatan rangkaian tambah sokongan protokol MRP (Media Redundancy Protocol), yang membenarkan toleransi kesalahan dengan menggelungkan berbilang suis Ethernet.
    • Kepada sistem kawalan lalu lintas (Tc) tambah tindakan "pintu" baharu, yang memungkinkan untuk menentukan selang masa untuk memproses dan membuang paket tertentu.
    • Sokongan untuk menguji kabel rangkaian yang disambungkan dan diagnosis kendiri peranti rangkaian telah ditambahkan pada kernel dan utiliti ethtool.
    • Sokongan untuk algoritma MPLS (Multiprotocol Label Switching) telah ditambahkan pada timbunan IPv6 untuk penghalaan paket menggunakan pensuisan label multiprotocol (MPLS sebelum ini disokong untuk IPv4).
    • Sokongan tambahan untuk menghantar paket IKE (Internet Key Exchange) dan IPSec melalui TCP (RFC 8229) untuk memintas kemungkinan sekatan UDP.
    • Ditambah oleh peranti blok rangkaian rnbd, yang membolehkan anda mengatur akses jauh ke peranti blok menggunakan pengangkutan RDMA (InfiniBand, RoCE, iWARP) dan protokol RTRS.
    • Dalam timbunan TCP tambah sokongan untuk mampatan julat dalam respons pengakuan terpilih (SACK).
    • Untuk IPv6 dilaksanakan Sokongan TCP-LD (RFC 6069, Gangguan Ketersambungan Panjang).
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Pemacu DRM i915 untuk kad video Intel termasuk sokongan untuk cip Intel Tiger Lake (GEN12) secara lalai, yang mana dilaksanakan keupayaan untuk menggunakan sistem SAGV (System Agent Geyserville) untuk melaraskan frekuensi dan voltan secara dinamik bergantung pada penggunaan kuasa atau keperluan prestasi.
    • Pemacu amdgpu telah menambah sokongan untuk format piksel FP16 dan keupayaan untuk bekerja dengan penimbal yang disulitkan dalam memori video (TMZ, Zon Memori Dipercayai).
    • Menambahkan sokongan untuk penderia kuasa untuk pemproses AMD Zen dan Zen2, serta penderia suhu untuk AMD Ryzen 4000 Renoir. Sokongan untuk mendapatkan semula maklumat penggunaan kuasa melalui antara muka disediakan untuk AMD Zen dan Zen2 RAPL (Had Kuasa Purata Berjalan).
    • Menambahkan sokongan untuk format pengubah suai NVIDIA pada pemacu Nouveau. Untuk gv100, keupayaan untuk menggunakan mod pengimbasan berjalin telah dilaksanakan. Menambah definisi vGPU.
    • Menambahkan sokongan untuk GPU Adreno A405, A640 dan A650 pada pemacu MSM (Qualcomm).
    • Ditambah rangka kerja dalaman untuk mengurus sumber DRM (Direct Rendering Manager).
    • Menambahkan sokongan untuk telefon pintar Xiaomi Redmi Note 7 dan Samsung Galaxy S2, serta komputer riba Chromebook Elm/Hana.
    • Pemacu tambahan untuk panel LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Sokongan tambahan untuk papan dan platform ARM Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMino, Check Point Lime
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Kotak TV Xnano X5, Stinger96, Beaglebone-AI.

    • Menambah sokongan untuk pemproses MIPS Loongson-2K (disingkat Loongson64). Untuk CPU Loongson 3, sokongan untuk virtualisasi menggunakan hipervisor KVM telah ditambah.
    • Ditambah
      sokongan untuk pemproses Baikal-T1 Rusia dan sistem-pada-cip berdasarkannya BE-T1000. Pemproses Baikal-T1 mengandungi dua teras superscalar P5600 MIPS 32 r5 yang beroperasi pada 1.2 GHz. Cip mengandungi cache L2 (1 MB), pengawal memori DDR3-1600 ECC, 1 port Ethernet 10Gb, 2 port Ethernet 1Gb, pengawal PCIe Gen.3 x4, 2 port SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Pemproses menyediakan sokongan perkakasan untuk virtualisasi, arahan SIMD dan pemecut kriptografi perkakasan bersepadu yang menyokong GOST 28147-89. Cip ini dibangunkan menggunakan unit teras pemproses MIPS32 P5600 Warrior yang dilesenkan daripada Imagination Technologies.

Pada masa yang sama, Yayasan Perisian Percuma Amerika Latin terbentuk
pilihan kernel percuma sepenuhnya 5.8 - Linux-percuma 5.8-gnu, dibersihkan daripada perisian tegar dan elemen pemacu yang mengandungi komponen bukan bebas atau bahagian kod, yang skopnya dihadkan oleh pengilang. Keluaran baharu melumpuhkan pemuatan gumpalan dalam pemacu untuk Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Penukar Kadar Sampel Asynchronous Dipertingkat, Maxim Integrated MAX98390 Speaker Aimplifier, Microsemi Processor ZL38060 Home Amplifier, Microsemi Processor ZL2 Home dan I86C EEPROM Slave. Kod pembersihan gumpalan dikemas kini dalam Adreno GPU, HabanaLabs Goya, skrin sentuh x6656, vtXNUMX dan pemacu dan subsistem btbcm.

Sumber: opennet.ru

Tambah komen