Linux 之父炮轟 Intel 的補丁是垃圾!
英特爾近日向內核遞交了修復 Meltdown 和 Spectre 漏洞的補丁,但與間接分支預測(Spectre variant 2)有關的補丁遭到了 Linux 之父 Linus Torvalds 的無情抨擊,稱該補丁是徹徹底底的垃圾。
現將他發在lkml.org上的郵件翻譯如下:
所有這些都是純粹的垃圾!
英特爾真打算將這種垃圾做入到底層架構中?難道就沒有人去跟他們說話,告訴他們這純屬犯傻嗎?
拜託,這裡的英特爾工程師,請與你們的經理談談。
如果替代方案是召回二十年前的產品,並給每個人免費的CPU,我不敢確定這完全瘋了。
你們似乎很相信急救湯藥(cool-aid)。拜託,請加入一點批判性思維。因為這不是有助於讓人起死回生的那種急救湯藥,這是會燒壞腦子的那種急救湯藥。
當然,這是糟糕的改動(hack)。問題不在於這是糟糕的改動,實際情況要糟糕得多。
作為對現有CPU採取的改動,它幾乎可以忍受,只要它在下一代出來之前完全消失。
這是這方面這個大問題的一部分。推測控制cpuid部分表明,英特爾實際上似乎打算為Meltdown做正確的事情(主要問題是何時做)。這並不讓人大為驚訝,因為這個漏洞很容易修復,這其實是個很大的漏洞。沒有為Meltdown做正確的事情將是完全無法接受的。
所以IBRS垃圾意味著,英特爾不打算為間接的分支推測做正確的事情。
老實說,這也是完全無法接受的。
所以我覺得很奇怪的地方是IBRS_ALL功能,未來的CPU號稱「我能夠做到牢不可破」,然後你得在啟動時啟用IBRS部分,以便*要求*它牢不可破。這部分很奇怪,因為應該像對待RDCL_NO部分那樣對待它,也就是「你再也不必擔心,它變得更好。」
這根本不「奇怪」。這實際上就是「這完全是垃圾」的根源。
在我看來,整個IBRS_ALL功能很清楚地表明「英特爾並不重視這個,我們會有一個改動,將耗費巨大的成本,因此我們不想在默認情況下啟用這個改動,因為那樣基準測試時表現很糟糕。」
所以,他們而是試圖把這個垃圾塞給我們。他們這麼做是完全錯誤的,即便從技術角度來看也是完全錯誤的。
我確信英特爾的一些律師說「我們要想方設法避免被訴訟。」但法律上的理由造就不出優秀的技術,也造就不出我會打上的優秀的補丁。
我們確實需要IBPB功能來完成retpoline為我們提供的那種保護,也就是用retpoline重建所有用戶空間。
真是垃圾。
你們見過你們談論的補丁嗎?你們應該見過了,有幾個補丁標有英特爾的大名。
補丁會執行一些操作,比如為內核的入口/退出點添加垃圾MSR寫入。這真是瘋了。這號稱「我們在努力保護內核」。我們已經有了retpoline,開銷較少。
於是,有人在這裡沒有說實話。有人在發布完全是垃圾的東西,也不知道出於什麼原因。恕我直截了當地指出這點。
如果這麼做是為了在不同用戶之間的實際上下文切換時清空分支目標緩衝器(BTB),我倒是會相信你們。但那根本不是補丁所做的事情。
實際上,這些補丁完完全全是垃圾。
他們在做確實很愚蠢的事情,他們在做沒有意義的事情。這讓你們搬出的所有觀點都成問題、值得懷疑。補丁在做不合理的事情。
到底在搞什麼鬼?
而這實際上忽略了一個極其糟糕的問題,那就是那群傻瓜實際上錯誤設計了整個硬體介面。
設計錯誤主要出於這兩個原因:
?「介面意味著英特爾永遠不會修復」。
看看IBRS_ALL和RDCL_NO之間的區別。一個意味著英特爾會解決問題,另一個則不然。
你果真認為這是可以接受的嗎?
?「根本沒有性能指標」。
擁有來自微架構的cpuid和標誌其意義在於,我們可以使用那些來做出決定。
但是由於我們已經知道,IBRS在現有硬體上的開銷很大很大,所有那些硬體功能部分是完完全全的垃圾。有點頭腦的人都不會使用它們,因為成本實在太高了。所以你最後不得不看看「這是哪個CPU步進(CPU stepping)」。
我認為,我們需要比這個垃圾來得好的東西。
Linus
※滴滴App出現故障嚇壞網友:距離700公里,預計1600分鐘後到達……
TAG:雲頭條 |