新聞中心
雖然 Linux 內(nèi)核在快速發(fā)展,但它同時依賴著一些非常古老的工具,其中之一就是內(nèi)核代碼仍在使用 1989 年版本的 C 語言標準——此標準在 30 多年前內(nèi)核項目啟動之前就已經(jīng)編寫完成。從討論結(jié)果來看,這一情況有望在 5.18 版本內(nèi)核中改變。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比隨州網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式隨州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋隨州地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。
Jakob Koschel 在向 Linus Torvalds 遞交的補丁 (https://lkml.org/lkml/2022/2/17/1032) 中修復了內(nèi)核鏈表相關的預測執(zhí)行漏洞。
起因是 Jakob 發(fā)現(xiàn)了一個問題,Linux 內(nèi)核廣泛使用由 struct list_head 定義的雙向鏈表:
struct list_head {
struct list_head *next, *prev;
};這種結(jié)構(gòu)體通常被嵌入到其他結(jié)構(gòu)體中,通過這種方式,開發(fā)者可以使用任何感興趣的結(jié)構(gòu)類型制作鏈表。除此之外,內(nèi)核還提供了大量可用于遍歷和操作鏈表的函數(shù)和宏。其中之一是 list_for_each_entry(),這是一個偽裝成控制結(jié)構(gòu)的宏。要了解如何使用此宏,請假設內(nèi)核包含如下結(jié)構(gòu):
struct foo {
int fooness;
struct list_head list;
};list 成員可用于創(chuàng)建 foo 結(jié)構(gòu)體的雙向鏈表,假設我們有一個叫做 foo_list 的結(jié)構(gòu)聲明作為此類鏈表的頭,使用以下代碼可以遍歷此列表:
struct foo *iterator;
list_for_each_entry(iterator, &foo_list, list) {
do_something_with(iterator);
}
/* Should not use iterator here */
list 參數(shù)告訴宏在 foo 結(jié)構(gòu)中 list_head 結(jié)構(gòu)體的名稱。此循環(huán)將為列表中的每個元素執(zhí)行一次,迭代器指向該元素。由此導致了 USB 子系統(tǒng)中的一個 bug:傳遞給該宏的迭代器在退出宏后還能被使用。
Koschel 通過重新編寫有問題的代碼,以在循環(huán)后停止使用迭代器來解決問題。
不過 Linus 卻對補丁修復的問題表示不解,也沒有看到它與預測執(zhí)行漏洞的關系。Koschel 對此進行了進一步解釋,對此 Linus 認為這只是一個普通的 bug。但不久之后 Linus 發(fā)現(xiàn)了問題的根源所在:傳遞給列表遍歷宏的迭代器,必須在循環(huán)本身之外的范圍內(nèi)聲明。
隨后,Linus 認為也許可以采用更直接的修復如塊級變量聲明。但 C89 不支持,而 1999 年發(fā)布的 C99 標準支持。所以 Linux 內(nèi)核也許是時候轉(zhuǎn)向使用 C99 標準了。
Linus 說到,內(nèi)核代碼一直停留在 C89 的原因之一是編譯器 gcc 的舊版本會出現(xiàn)奇怪的問題,導致初始化程序被破壞。不過現(xiàn)在內(nèi)核要求的 GCC 最低版本已經(jīng)提高到了 v5.1,那些 bug 可能不再相關了。
另一位密切關注架構(gòu)編譯器問題的內(nèi)核開發(fā)者 Arnd Bergmann 提議直接升級到 C11 甚至 C2x,盡管他不確定 C11 是否會帶來任何對內(nèi)核有用的新內(nèi)容。不過如果升級到 C17 或 C2x,會破壞對 gcc-5/6/7 的支持,因此升級到 C11 更容易實現(xiàn),而且跨越太大內(nèi)核社區(qū)未必接受。
Linus 贊成了這個想法,在 Bergmann 確認應該可以這樣做之后,Linus 宣布將在下一個內(nèi)核版本 v5.18 中嘗試使用 C11 標準。如果一切順利,下一個內(nèi)核版本使用的 C 語言標準有望升級到 C11。
本文標題:Linus終于被勸動:用了30年的Linux內(nèi)核C語言將升級
文章路徑:http://m.fisionsoft.com.cn/article/dhpsedg.html


咨詢
建站咨詢
