Linux 6.2 內核版本

經過兩個月的開發,Linus Torvalds 發布了 Linux 核心 6.2。 最顯著的變化包括:允許接受 Copyleft-Next 許可證下的程式碼、改進了 Btrfs 中 RAID5/6 的實作、繼續整合對 Rust 語言的支援、減少了防止 Retbleed 攻擊的開銷、添加了在寫回期間調節記憶體消耗的能力,增加了TCP 平衡PLB(保護性負載平衡)的機制,增加了混合命令流保護機制(FineIBT),BPF 現在能夠定義自己的物件和資料結構,包含了rv(運行時驗證)實用程序,降低了實現RCU 鎖的功耗。

新版本包含來自 16843 名開發人員的 2178 個修復,補丁大小為 62 MB(更改影響了 14108 個文件,添加了 730195 行程式碼,刪除了 409485 行程式碼)。 42 中引入的所有變更中約6.2% 與裝置驅動程式相關,約16% 的變更與更新特定於硬體架構的程式碼相關,12% 與網路堆疊相關,4% 與檔案系統相關,3% 與檔案系統相關。與內部核心子系統相關。

內核 6.2 中的主要創新:

  • 內存和系統服務
    • 允許包含在 Copyleft-Next 0.3.1 許可證下提供的核心程式碼和變更中。 Copyleft-Next 授權由 GPLv3 的作者之一創建,與 GPLv2 授權完全相容,經 SUSE 和 Red Hat 律師確認。 與 GPLv2 相比,Copyleft-Next 授權更加緊湊且更易於理解(介紹性部分和過時妥協的提及已被刪除),定義了消除違規行為的時間範圍和程序,並自動刪除過時軟體的 Copyleft 要求已超過15 歲。

      Copyleft-Next 還包含專有技術授予條款,與 GPLv2 不同,該條款使該授權與 Apache 2.0 授權相容。 為了確保與 GPLv2 完全相容,Copyleft-Next 明確指出,除了原始 Copyleft-Next 授權之外,還可以在 GPL 授權下提供衍生作品。

    • 該結構包括“rv”實用程序,它提供了用戶空間與 RV(運行時驗證)子系統處理程序進行交互的接口,旨在檢查高度可靠的系統上的正確操作,以保證不出現故障。 驗證是在運行時透過將處理程序附加到追蹤點來執行的,這些點根據定義系統預期行為的機器的預定參考確定性模型檢查實際執行進度。
    • zRAM設備允許交換分區以壓縮形式儲存在記憶體中(在記憶體中創建一個區塊設備,透過壓縮對其進行交換),實現了使用替代演算法重新打包頁面的能力,以達到更高的水平的壓縮。 主要想法是提供幾種演算法(lzo、lzo-rle、lz4、lz4hc、zstd)之間的選擇,在壓縮/解壓縮速度和壓縮等級之間提供自己的折衷方案,或在特殊情況下進行最佳化(例如,用於壓縮大數據)記憶體頁)。
    • 新增了「iommufd」API,用於從用戶空間管理 I/O 記憶體管理系統 - IOMMU(I/O 記憶體管理單元)。 新的 API 使得使用檔案描述符管理 I/O 記憶體頁表成為可能。
    • BPF 提供了創建類型、定義自己的物件、建立自己的物件層次結構以及靈活創建自己的資料結構(例如鍊錶)的能力。 對於進入睡眠模式 (BPF_F_SLEEPABLE) 的 BPF 程序,新增了對 bpf_rcu_read_{,un}lock() 鎖定的支援。 實作了對保存 task_struct 物件的支援。 新增了映射類型 BPF_MAP_TYPE_CGRP_STORAGE,為 cgroup 提供本機儲存。
    • 對於 RCU(讀取-複製-更新)阻塞機制,實作了一種可選的「惰性」回調呼叫機制,其中使用批次模式下的計時器一次處理多個回調呼叫。 透過應用程式所提出的最佳化,我們可以透過在系統空閒時間或低負載期間推遲 RCU 請求,將 Android 和 ChromeOS 裝置的功耗降低 5-10%。
    • 新增了 sysctl split_lock_mitigate 以控制系統在偵測到因執行原子指令時資料跨越兩個 CPU 快取線而存取記憶體中未對齊資料時發生的分割鎖時的反應。 這種阻塞會導致效能顯著下降。 將 split_lock_mitigate 設為 0 僅發出存在問題的警告,而將 split_lock_mitigate 設為 1 還會導致鎖定的進程減慢,以保留系統其餘部分的效能。
    • 為PowerPC架構提出了qspinlock的新實現,它展示了更高的性能並解決了異常情況下出現的一些鎖定問題。
    • MSI(訊息訊號中斷)中斷處理程式碼已經重新設計,消除了累積的架構問題,並添加了將各個處理程序綁定到不同設備的支援。
    • 對於基於龍芯3 5000處理器採用的LoongArch指令集架構並實現新的RISC ISA的系統,類似於MIPS和RISC-V,實現了對ftrace、堆疊保護、睡眠和待機模式的支援。
    • 提供了為共享匿名記憶體區域分配名稱的功能(以前名稱只能分配給分配給特定進程的私有匿名記憶體)。
    • 新增了新的核心命令列參數“trace_trigger”,旨在啟動追蹤觸發器,用於綁定觸發控制檢查時呼叫的條件命令(例如,trace_trigger=”sched_switch.stacktrace if prev_state == 2”)。
    • 對 binutils 軟體包版本的要求已提高。 現在建構核心至少需要 binutils 2.25。
    • 當呼叫 exec() 時,新增了將進程放置在時間命名空間中的功能,其中時間與系統時間不同。
    • 我們已經開始從 Rust-for-Linux 分支轉移與使用 Rust 語言作為開發驅動程式和核心模組的第二語言相關的附加功能。 預設情況下,Rust 支援處於停用狀態,並且不會導致 Rust 被包含為必需的核心建置依賴項。 上一版本中提供的基本功能已擴展為支援低階程式碼,例如 Vec 類型和巨集 pr_debug!()、pr_cont!() 和 pr_alert!(),以及流程巨集“#[vtable” ]”,它簡化了函數指標表的使用。 預計在未來的版本中將在核心子系統上添加高級 Rust 綁定,這將允許在 Rust 中創建成熟的驅動程式。
    • 對於所有體系結構,內核中使用的“char”類型現在預設聲明為無符號。
    • 專為內存量較小的系統設計的slab記憶體分配機制-SLOB(slab分配器)已宣告過時。 一般情況下建議使用SLUB或SLAB來取代SLOB。 對於記憶體量較小的系統,建議使用SLUB_TINY模式的SLUB。
  • 磁盤子系統、I/O 和文件系統
    • 對 Btrfs 進行了改進,旨在修復 RAID 5/6 實作中的「寫入漏洞」問題(如果在寫入過程中發生崩潰並且無法了解 RAID 裝置上的哪個區塊被正確寫入,則嘗試恢復 RAID,這可能導致塊破壞,對應於被覆蓋的塊)。 此外,SSD 現在會在可能的情況下自動預設啟用非同步丟棄操作,由於將丟棄操作有效分組到佇列中並由後台處理器處理佇列,因此可以提高效能。 改進了發送和 lseek 操作以及 FIEMAP ioctl 的效能。
    • 管理區塊設備延遲寫入(寫回、更改資料的後台儲存)的功能已擴展。 在某些情況下,例如使用網路區塊裝置或 USB 隨身碟時,延遲寫入可能會導致大量 RAM 消耗。 為了控制延遲寫入的行為並將頁面快取大小保持在一定限制內,sysfs (/sys/class/bdi/) 中引入了新參數 strict_limit、min_bytes、max_bytes、min_ratio_fine 和 max_ratio_fine。
    • F2FS 檔案系統實作原子取代 ioctl 操作,讓您在單一原子操作中將資料寫入檔案。 F2FS 還添加了區塊擴展緩存,以幫助識別活躍使用的資料或長時間未存取的資料。
    • 在 ext4 FS 中僅記錄了錯誤更正。
    • ntfs3 檔案系統提供了幾個新的掛載選項:「nocase」用於控製檔案和目錄名稱的大小寫敏感性; windows_name 禁止建立包含對 Windows 無效的字元的檔案名稱; hide_dot_files 控制以點開頭的檔案的隱藏檔案標籤的指派。
    • Squashfs 檔案系統實作了「threads=」掛載選項,該選項可讓您定義並行解壓縮操作的執行緒數。 Squashfs 還引入了映射已安裝檔案系統的使用者 ID 的功能,用於將已安裝外部分割區上的特定使用者的檔案與目前系統上的另一個使用者進行比對。
    • POSIX 存取控制清單 (POSIX ACL) 的實作已重新設計。 新的實作消除了架構問題,簡化了程式碼庫維護,並引入了更安全的資料類型。
    • 用於檔案和目錄透明加密的fscrypt子系統增加了對SM4加密演算法(中國標準GB/T 32907-2016)的支援。
    • 已經提供了在不支援 NFSv2 的情況下建立核心的能力(將來他們計劃完全停止支援 NFSv2)。
    • 檢查 NVMe 裝置存取權限的組織已變更。 如果寫入程序有權存取裝置的專用檔案(先前該進程必須具有 CAP_SYS_ADMIN 權限),則提供讀取和寫入 NVMe 裝置的能力。
    • 刪除了 CD/DVD 軟體包驅動程序,該驅動程式已於 2016 年棄用。
  • 虛擬化和安全
    • Intel 和 AMD CPU 中採用了一種新的針對 Retbleed 漏洞的防護方法,即使用呼叫深度跟踪,該方法不會像之前針對 Retbleed 的防護那樣減慢工作速度。 為了啟用新模式,提出了核心命令列參數「retbleed=stuff」。
    • 新增混合FineIBT指令流保護機制,結合使用硬體Intel IBT(間接分支追蹤)指令和軟體保護kCFI(內核控制流完整性)來阻止因使用而違反正常執行順序(控制流)修改儲存在函數記憶體中的指針的漏洞。 FineIBT 僅在跳到位於函數最開頭的 ENDBR 指令的情況下才允許透過間接跳到執行。 此外,與 kCFI 機制類比,然後檢查雜湊值以確保指標的不變性。
    • 新增了限制,以阻止操縱「oops」狀態產生的攻擊,之後有問題的任務完成並在不停止系統的情況下恢復狀態。 當大量呼叫“oops”狀態時,會發生引用計數器溢位(refcount),從而允許利用 NULL 指標取消引用引起的漏洞。 為了防止此類攻擊,內核中添加了“oops”觸發器最大數量的限制,超過該數量後,內核將啟動轉換到“panic”狀態,然後重新啟動,這將不允許實現溢出引用計數所需的迭代次數。 預設情況下,限制設定為 10 個“oops”,但如果需要,可以透過 oops_limit 參數進行變更。
    • 新增了配置參數 LEGACY_TIOCSTI 和 sysctl Legacy_tiocsti,以停用使用 ioctl TIOCSTI 將資料放入終端的功能,因為此功能可用於將任意字元替換到終端輸入緩衝區並模擬使用者輸入。
    • 提出了一種新型內部結構encoded_pa​​ge,其中指針的低位用於存儲附加信息,用於防止意外取消引用指針(如果確實需要取消引用,則必須首先清除這些附加位) 。
    • 在 ARM64 平台上,在啟動階段,可以啟用或停用 Shadow Stack 機制的軟體實現,該機制用於防止在堆疊上發生緩衝區溢出時覆蓋函數的返回位址(保護的本質是在控制權轉移到函數後將返回地址保存在單獨的“影子”堆疊中,並在退出函數之前檢索給定的地址)。 在一個內核程式集中支援 Shadow Stack 的硬體和軟體實現,使您可以在不同的 ARM 系統上使用同一個內核,無論它們是否支援指標驗證指令。 軟體實現的包含是透過在載入期間替換程式碼中的必要指令來實現的。
    • 新增了對在 Intel 處理器上使用非同步退出通知機制的支持,該機制允許檢測對 SGX enclave 中執行的程式碼的單步攻擊。
    • 提出了一組操作,允許虛擬機器管理程式支援來自 Intel TDX(可信任域擴展)客戶系統的請求。
    • 核心建置設定 RANDOM_TRUST_BOOTLOADER 和 RANDOM_TRUST_CPU 已刪除,取而代之的是對應的命令列選項 random.trust_bootloader 和 random.trust_cpu。
    • Landlock機制可讓您限制一組進程與外部環境的交互,增加了對LANDLOCK_ACCESS_FS_TRUNCATE標誌的支持,這使得控製檔案截斷操作的執行成為可能。
  • 網絡子系統
    • 對於IPv6,增加了對PLB(保護性負載平衡)的支持,這是一種網路鏈路之間的負載平衡機制,旨在減少資料中心交換器上的過載點。 PLB透過改變IPv6流標籤,隨機改變封包路徑,以平衡交換器連接埠的負載。 為了減少資料包重新排序,此操作盡可能在空閒期後執行。 Google 資料中心使用 PLB 後,交換器連接埠的負載不平衡平均降低了 60%,丟包率降低了 33%,延遲降低了 20%。
    • 新增了支援 Wi-Fi 7 (802.11be) 的 MediaTek 裝置的驅動程式。
    • 新增了對 800 Gb 連結的支援。
    • 新增了在不停止工作的情況下動態重命名網路介面的功能。
    • 有關 SYN 洪水的日誌訊息中已新增了封包到達的 IP 位址的提及。
    • 對於UDP,已經實現了針對不同的網路命名空間使用單獨的雜湊表的能力。
    • 對於網橋,已經實現了對MAB(MAC Authentication Bypass)認證方法的支援。
    • 對於 CAN 協定 (CAN_RAW),已實現對 SO_MARK 套接字模式的支持,以附加基於 fwmark 的流量過濾器。
    • ipset 實作了一個新的位元遮罩參數,可讓您根據 IP 位址中的任意位元來設定遮罩(例如,「ipset create set1 hash:ip bitmask 255.128.255.0」)。
    • 新增了對處理隧道資料包內的內部標頭到 nf_tables 的支援。
  • Оборудование
    • 增加了「accel」子系統,實現了計算加速器框架,該框架可以以單獨 ASIC 的形式提供,也可以以 SoC 和 GPU 內部 IP 區塊的形式提供。 這些加速器主要旨在加速機器學習問題的解決。
    • amdgpu 驅動程式包括對 GC、PSP、SMU 和 NBIO IP 組件的支援。 對於ARM64系統,實現了DCN(Display Core Next)的支援。 受保護螢幕輸出的實作已從使用 DCN10 轉移到 DCN21,現在可以在連接多個螢幕時使用。
    • i915 (Intel) 驅動程式穩定了獨立 Intel Arc (DG2/Alchemist) 顯示卡的支援。
    • Nouveau 驅動程式支援基於 Ampere 架構的 NVIDIA GA102 (RTX 30) GPU。 對於 nva3 (GT215) 卡,增加了控制背光的功能。
    • 新增了基於 Realtek 8852BE、Realtek 8821CU、8822BU、8822CU、8723DU (USB) 和 MediaTek MT7996 晶片的無線適配器、Broadcom BCM4377/4378/4387 晶片的無線適配器、Broadcom BCM8521/XNUMX/XNUMX 晶片的無線適配器、Broadcom BCMXNUMX/XNUMX/XNUMX 藍牙連接器以及 TeIAm
    • 新增了內建聲音晶片 HP Stream 8、Advantech MICA-071、Dell SKU 0C11、Intel ALC5682I-VD、Xiaomi Redmi Book Pro 14 2022、i.MX93、Armada 38x、RK3588 的 ASoC(ALSA 晶片上系統)支援。 新增了對 Focusrite Saffire Pro 40 音訊介面的支援。新增了 Realtek RT1318 音訊編解碼器。
    • 增加了對索尼智慧型手機和平板電腦(Xperia 10 IV、5 IV、X 和X Compact、OnePlus One、3、3T 和Nord N100、小米Poco F1 和Mi6、華為Watch、Google Pixel 3a、三星Galaxy Tab 4 10.1 )的支持。
    • 新增了對ARM SoC 和Apple T6000 (M1 Pro)、T6001 (M1 Max)、T6002 (M1 Ultra)、Qualcomm MSM8996 Pro (Snapdragon 821)、SM6115 (Snapdragon 662)、SM4250 (Snapdragon 460)、Snapdragon6375 (Snapdragon)的支援板、SDM695 (Snapdragon 670)、MSM670 (Snapdragon 8976)、MSM652 (Snapdragon 8956)、RK650 Odroid-Go/rg3326、Zyxel NSA351S、InnoComm i.MX310MM、Odroid.MX Go Ultra。

同時,拉丁美洲自由軟體基金會形成了完全自由的核心 6.2 版本 - Linux-libre 6.2-gnu,清除了包含專有元件或程式碼片段的韌體和驅動程式元素,其範圍僅限於生產廠商。 新版本清理了 nouveau 驅動程式中的新斑點。 mt7622、mt7996 wifi 和 bcm4377 藍牙驅動程式中停用了 Blob 載入。 清理了 Aarch64 架構的 dts 檔案中的 blob 名稱。 更新了各種驅動程式和子系統中的斑點清理程式碼。 停止清理 s5k4ecgx 驅動程序,因為它已從核心中刪除。

來源: opennet.ru

添加評論