Linux Kernel 5.10-RC1發布:棄用可追溯到初版的set_fs ()功能
Linus Torvalds 已經啟動了Linux Kernel 的新開發週期,並宣布了5.10 分支的首個候選版本更新。這同時也是一次歷史性的轉變,在本次更新中棄用了延續十多年、是眾多安全漏洞根源的set_fs (),並且修復了XFS 文件系統中的“Year 2038” 問題。
棄用set_fs ()
set_fs ()功能允許Linux kernel覆蓋地址空間,在對於處理英特爾的286/386處理器非常有用。在內核週報中,Torvalds解釋稱set_fs ()功能將檢查用戶區的副本是否已實際移動到用戶區或者內核區。如2010年CVE-2010-4258中所述,它可用於覆蓋任何內核位置並獲得許可。
該漏洞在2010 的時候已經得到修復。不過伴隨著時間的推移,芯片設計人員開始使用其他更優秀的內存管理技術上。Torvalds 表示在x86、PowerPC 、S390 和RISC-V 架構中已經禁用了這種類型的磁盤空間擁塞。
Torvalds 表示,set_fs ()功能大致可以追溯到Linux 的初代版本,並一直保留到現在。Torvalds 表示這雖然不是太大的變化,但是依然非常有趣,這對大部分用戶來說並沒有關係,只是一個很小的腳註。在移除了set_fs ()功能之後,Torvalds 表示其他部分一切正常。
在Linux Kernel 郵件日誌中寫道:
對於我來說,最有趣的改變就是從Christoph 移除了setf_fs (),已經通過AI Viro 進行合併,你可以在下方的Mergelog 中查看。這並不是什麼大的調整但非常有趣,因為確認用戶空間的副本是否真實移動到用戶空間或者內核空間的整個set_fs () 功能最早可以追溯到Linux 初版。儘管這個名稱完全是歷史性的,但這個概念依然存在。
我們仍然有“ set_fs()”,並且並非所有架構都已轉換為新標準,但是x86,PowerPC,S390和RISC-V架構以及所有架構都禁止這種類型的空間擁塞。在這個方向上進行了基礎工作。我希望其他體系結構也將擺脫這種非常古老的模型,儘管要擺脫它可能需要一些時間。
Year 2038 問題
Linux Kernel 5.10 對XFS 文件系統進行了大幅的改進。這個“大時間戳”功能是對其時間戳和inode 編碼功能進行重構,以將時間戳作為64 位納秒計數器進行處理,並通過移位來增加有效大小。
現在,這使XFS可以很好地克服2038年的問題(在那裡,以秒為單位存儲自1970年以來的時間將不再適合有符號的32位整數,因此無法環繞)到現在的2486年。
使用以下命令創建新的XFS文件系統:啟用bigtime允許的時間戳範圍是1901年12月至2486年7月,而不是1901年12月至2038年1月。為了保持向後兼容,默認情況下當前未啟用big timestamps功能。
相比較Linux 5.9,Linux 5.10-RC1 新增了70.4 萬行代碼,刪除了大約41.9 萬行代碼。而作為對比,從Linux 5.8 升級到Linux 5.9-RC1 新增了72.7 萬代碼,刪除了27 萬行代碼;而從Linux 5.7 升級到Linux 5.8-RC1 新增了97.3 萬代碼,刪除了42.9 萬行代碼。因此雖然它的更改幅度並不是最大的,但也排在前列,引入了相當多的改進。
對於Linux 5.10-RC1,Torvalds 評論道:“這[指更新規模]要比我預期的要大,雖然合併窗口要比5.8 小,但也沒有小太多。5.8 依然是我們最大的發布版本。我無法確定未來是否會繼續保持這種上升趨勢(我認為未來可能會經歷一段穩定期)。Linux Kernel 5.10 的開發工作開展的非常順利,我想不會出現和5.9 一樣延遲一周的情況。我看不到任何巨大的危險信號,並且合併窗口也沒有對我造成任何不尋常的問題。我認為下面的合併日誌可以使您大致了解正在發生的事情,但是如果您對詳細信息感興趣,請查看git樹。”