Skip to content

Store-to-Load Forwarding

Out-of-order core, bekleyen bir store'un değerini, store retire olmadan önce store buffer'dan doğrudan daha genç (younger) bir load'a forward eder; yanlış tahmin edilen forwarding (ya da onun bypass'ı) Spectre v4'ün temelidir.

Mechanism

Note

Out-of-order bir core'da store'lar retire olana kadar bir store buffer'da bekler. Read-after-write bağımlılıklarını stall yapmadan onurlandırmak için, her load cache/memory'ye bakmadan önce aynı adrese yapılmış daha eski store'ları arar; bir eşleşmede store'un değeri, store commit edilmeden önce doğrudan store buffer'dan forward edilir. Tam adres karşılaştırması yavaş olduğundan core bir memory-disambiguation predictor kullanır ve kısmi adres eşleşmesinde forward edebilir ya da adresi henüz çözülmemiş bir store'u speculative olarak bypass edebilir. Bu tahmin yanlış olduğunda load, eski (stale) veriyle transient olarak çalışır ve bu veri ardından bir cache covert channel üzerinden sızdırılabilir — bu, Speculative Store Bypass'tır (Spectre v4 / SSB, CVE-2018-3639).

Walkthrough

Forwarding kuralı şudur: "her load, memory'ye bakmadan önce aynı adrese yapılmış daha eski store'ları arar." Spectre v4, store adresinin geç hesaplandığı durumu sömürür; öyle ki daha genç bir load o konumdaki eski değeri speculative olarak okur:

// store address resolves late; load executes speculatively with stale data
*slow_ptr = secret_index;        // store, address not yet resolved
x = array[*slow_ptr];            // load may bypass the store, use OLD *slow_ptr
y = probe[x * 64];               // leak transient x via cache footprint

Mitigation, IA32_SPEC_CTRL MSR'ındaki bir bit ile kontrol edilen Speculative Store Bypass Disable (SSBD)'dir (Intel bunu açığa çıkarmak için güncel microcode gerektirir; AMD ise microcode olmadan sunar). SSBD'yi set etmek, load'ları önceki store'lara göre non-speculative olmaya zorlar.

Maliyet

SSBD'yi etkinleştirmenin kabaca %2-8 overhead getirdiği bildirildi; en çok JIT-yoğun yazılımları (JavaScript engine'leri, eBPF) etkiler.

Mitigation

  • IA32_SPEC_CTRL üzerinden SSBD (process bazında prctl(PR_SET_SPECULATION_CTRL) ile ya da global olarak) speculative bypass'ı devre dışı bırakır.
  • Sandbox'larda geç çözülen store'lardan hemen sonra secret-dependent adreslerden kaçınmak (örn. JIT'lerde masking) sömürülebilir gadget'ları azaltır.

References