欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

position>home>Archive

Linux之父終于被勸動:用了30年的Linux內核C語言將升級至C11

還在使用89年版C語言的之至Linux內核,現在終于要做出改變了。父終今天,于被用年C語Linux開源社區(qū)宣布,勸動未來會把內核C語言版本升級到C11,內核預計5.18版之后生效,升級也就是之至今年5月。

Linux之父終于被勸動:用了30年的Linux內核C語言將升級至C11

這個決定很突然,父終從發(fā)起問題到官方聲明,于被用年C語不過才一個星期,勸動要知道說服固執(zhí)的內核Linux之父 Linus Torvalds可不是件容易的事。

事情的升級原因,說起來還有那么一點偶然的之至因素。

一個bug的父終連鎖反應

問題的起源是來自上周的一次Linux社區(qū)討論。

一位名叫Jakob Koschel的于被用年C語博士生,在研究阻止與內核鏈表primitive相關的預測執(zhí)行漏洞時,發(fā)現了這樣一個問題。

Linux內核廣泛使用由struct list_head定義的雙向鏈表:

structlist_head {

structlist_head *next, *prev;

};

這種結構通常嵌入到其他結構中。通過這種方式,可以使用任何相關的結構類型制作鏈表。

除此之外,內核還提供大量可用于遍歷和操作鏈表的函數和宏。list_for_each_entry()就是其中之一,這是偽裝成一種控制結構的宏。

問題就出在這個宏上。

假設內核包含如下結構:

structfoo {

int fooness;

structlist_headlist;

};

list中的元素可用于創(chuàng)建foo結構的雙向鏈表。

假設有一個叫做 foo_list的結構聲明作為此類鏈表的頭,使用以下代碼可以遍歷此鏈表:

structfoo *iterator;

list_for_each_entry(iterator, &foo_list, list) {

do_something_with(iterator);

}

/* Should not use iterator here */

list參數告訴宏在foo結構中l(wèi)ist_head結構的名稱。這個循環(huán)將為列表中的每個元素執(zhí)行一次, 迭代器指向該元素。

由此導致了USB子系統中的一個bug:傳遞給該宏的迭代器在退出宏后還能被使用。

這是一件危險的事情,所以Koschel提交了一個修復補丁,在循環(huán)后停止使用迭代器搞定了bug。

說服Linus

但是Linus Torvalds本人并不太喜歡這個補丁,也沒有看到它與預測執(zhí)行漏洞的關系。在Koschel詳細解釋后,Linus承認這只是一個普通的bug。

然而事情并沒有那么簡單,Linus不久后意識到了真正的根源:

傳遞給鏈表遍歷宏的迭代器,必須在循環(huán)本身之外的范圍內聲明。

這種非預測性bug發(fā)生的原因是,C89中沒有“在循環(huán)中聲明變量”。

像list_for_each_entry()這樣的宏,從根本上總是將最后一個HEAD入口泄漏到循環(huán)之外,僅僅是因為我們不能在循環(huán)本身中聲明迭代器變量。

如果可以編寫一個可以聲明自己的迭代器列表遍歷宏,那么迭代器在循環(huán)之外將不可見,并且不會出現此類問題。

但是,由于內核停留在C89標準上,因此無法在循環(huán)中聲明變量。

Linus決定,那咱們還是升級吧,也許是時候轉向C99標準了。

雖然它也有20多年的歷史,但至少比C89新,可以在循環(huán)中聲明變量。

既然C89如此陳舊,這么多年還沒做出改變呢?Linus說,那是因為我們在一些古老的gcc編譯器版本中遇到了一些奇怪的問題,不能隨便升級。

但是,現在Linux內核已將gcc的最低要求提升至5.1版,因此過去那些奇怪的bug應該不會有了。

而另一位核心開發(fā)者Arnd Bergmann認為,咱們完全可以升級到C11甚至更高版本。但如果升級到C17或C2x,會破壞對gcc-5/6/7的支持,因此升級到C11更容易實現。

最終,Torvalds贊成這個想法:“好的,請?zhí)嵝盐遥屛覀冊?.18合并窗口的早期嘗試一下。”

接下來遷移到C11可能會導致一些意想不到的bug,但如果一切順利,下一個Linus內核版本將正式轉向C11。

參考鏈接:

[1]

https://lwn.net/SubscriberLink/885941/01fdc39df2ecc25f/

[2]https://news.ycombinator.com/item?id=30459634

Popular articles

主站蜘蛛池模板: 夜夜操夜夜爱| 别急慢慢来在线观看| 久热精品在线| 黑人插入| 亚洲国产电影在线观看| 八木梓纱老师三天两夜| 欧美乱大交| 天堂网中文字幕| 羞羞漫画页面免费入口欢迎你| 波多野结衣mxgs-983| 星空无限传媒好闺蜜2| 久久久久久久久国产| 久久91亚洲精品中文字幕| 果冻传媒麻豆电影| 2021日韩麻豆| 国产一精品一av一免费爽爽| 天天干天天射天天操| 拔播拔播华人永久免费| 欧美黑人巨大xxxxxxxx| 3p视频在线| 欧美a级成人淫片免费看 | 日本按摩xxxx| 啊灬啊灬啊灬快好深用力免费 | 欧美在线不卡| 中文字幕免费在线| 日本三级免费看| 国产美女免费观看| 篠田优在线播放| 色中色影视| 欧美中文字幕在线看| 国产破处在线| 亚洲综合无码一区二区| 欧美先锋影音| 好男人在线社区www| 波多野吉衣视频| 日韩欧美国产三级| 成人免费福利电影| 中文字幕1页| 男人女人边摸边吃奶边做| 久久99精品国产自在现线小黄鸭| 男人j插入女人p|