最近,Azul Systems公司的CTO與聯合創始人Gil Tene在Google Groups報告了一個十分重要,但鮮為人知的Linux內核補丁,采用英特爾Haswell架構的Linux系統用戶和管理員尤其應該關注該問題。特別是基於Red Hat發行版的用戶(包括CentOS 6.6以及Scientific Linux6.6),應該立即更新這個補丁。即便是運行在虛擬機中的Linux,如果這個虛擬機是在流行的雲平台上(如Azure、Amazon等),它也可能跑在Haswell機器上,打補丁應該是有好處的。
Tene是對該缺陷的描述如下:
“這個內核漏洞的影響非常簡單:在一些看似不可能的情況下,用戶進程會死鎖並被掛起。任何一個futex調 用等待(即使被正確地喚醒)都有可能永遠被阻止執行。就像Java裡的Thread.park() 可能會一直阻塞那樣,等等。如果足夠幸運,你會在dmesg日志中發現soft lockup消息;如果沒那麼幸運(比如跟我們這樣),你將不得不花幾個月的人工成本去排查代碼中的問題,還有可能一無所獲。”
Tene繼續解釋了這個缺陷代碼是如何執行的(最終可以歸結到一個遺漏了default情況的switch塊)。現在最大的問題是,盡管問題代碼已 經在2014年1月修復,但是在2014年10月左右,該缺陷又被移回了Red Hat 6.6家族系統中。其他系統包括SLES、Ubuntu、Debian等有可能也被影響了。
這些系統的修復情況現在並不一致,並且有可能被忽略。Red Hat用戶應該采用RHEL 6.6.z或更新的版本。Tene還指出另一個關鍵點在於,對於要將哪些東西放入內核,不同的發行版會有不同的選擇,這也導致問題的修復情況並不一致。
例如,對於RHEL 7.1而言,“其實上游的3.10內核是沒有這個bug的,但RHEL 7的內核又不是純粹的上游版本。不幸的是,RHEL 7.1(就像RHEL 6.6那樣)在移植的時候把(基於RHEL 7版本)這個bug包含了進去......我認為其他發行版可能也是這麼做的。”
對基於RHEL的發行版,Tene提供了一個快速參考列表:
RHEL 5(包括CentOS 5和Scientific Linux 5):所有版本(包括5.11版)都沒有問題。
RHEL 6(包括CentOS 6和Scientific Linux 6):從6.0~6.5版都沒問題。 但6.6版存在缺陷,而6.6.z版本沒有問題。
RHEL 7(包括CentOS 7和Scientific Linux 7):7.1是有缺陷的。並且截至2015年5月13日也沒有一個7.x的修復。
盡管在Hacker News上對受影響系統的數量存在一些爭議,但它提供了一些環境來檢查你的系統是否需要修復。
編者注:在將於2015年10月15日~17日舉行的QCon上海2015大會上,Azul Systems聯合創始人兼CTO Gil Tene將做主題演講。他是著名的Java和JVM專家。6月21日之前報名,可享7折優惠。
譯文:http://www.infoq.com/cn/news/2015/06/redhat-futex