nick2009 wrote:
呃...不理解不已解碼是怎麼能執行的...
不曾執行哪來的被旁路攻擊餘地...(恕刪)
我猜錯了. AMD的說法應該是正確. 指令被載入 L1 I-cache並進入 CPU核心解碼執行, 但 L1 D-cache並沒有被載入, 是被 hardware paging architecture protections擋下, 看起來 AMD CPU很聰明的在索引機制上做權限限制.
nick2009 wrote:
https://lkml.org/lkml/2017/12/27/2
Tom Lendacky說AMD架構上
不允許記憶體(含推測在內)的參照..(恕刪)
其實 Tom Lendacky說的是AMD架構上不允許記憶體(含推測執行在內)索引在較低權限模式下操作時讀取較高權限數據(只有在此條件下才不允許), 並且會導致頁面錯誤. 我猜 AMD CPU很聰明的在索引機制上做權限把關, 才避免這個災難, 這觀點很合理, 如果把推測執行仍舊透過分頁機制存取, 會再多花許多時間, 那麼推測執行的效率會被降低. AMD確實夠細心, 給他們拍拍手.
若我是 Intel應該不會用這個方式, 因為一顆 CPU的 buffer太多, 任何一處的資訊殘留都可能駭客留下後門, 若每個 buffer都設定權限, 又有太多比對動作, 浪費 CPU操作時間. 要是直接套用 Intel目前的偵錯機制, 執行階段觸發非法存取時, 不只註銷 ROB的指令輸出, 也把 L1 cache和 TLB內問題位址註記無效, 不再讀取, 下一次觸發 prefetch再把這些地方覆蓋掉, 就可以把漏洞堵起. 讓比對權限動作只需要一次, 但所有糾錯的過程連動, 一次全部註銷, 應該可以大量減少 CPU時間開銷. 當然這只是外行鄉民的觀點, 相信 Intel下一顆 CPU應該有更聰明的作法.




























































































