De Linux-kernel heeft sinds vorig jaar ten onrechte systemen verlaten die vertrouwen op de originele Indirect Branch Restricted Speculation (IBRS) voor Spectre V2-mitigatie zonder Single Threaded Indirect Branch Predictor (STIBP)-dekking voor cross-HyperThread die deze Spectre-kwetsbaarheid aanpakt. Er is een patch aan de gang die dit probleem oplost voor systemen uit het Intel Skylake-tijdperk.
Sinds afgelopen juni een wijziging is samengevoegd en wordt toegepast in Linux 5.19-rc2, is er geen STIBP-ondersteuning wanneer IBRS (het origineel, niet te verwarren met Intel eIBRS) is ingeschakeld. De patch die dit probleem oplost, legt uit:
“Als gewone IBRS is ingeschakeld (niet verbeterde IBRS), bepaalt de logica in spectre_v2_user_select_mitigation() dat STIBP niet nodig is.
De IBRS-bit beschermt impliciet tegen cross-thread vertakkingsdoelinjectie. Bij oudere IBRS wordt de IBRS-bit echter gewist bij terugkeer naar de gebruikersruimte om prestatieredenen, waardoor threads in de gebruikersruimte kwetsbaar zijn voor cross-thread vertakkingsdoelinjectie waartegen STIBP bescherming biedt.
Sluit IBRS uit van de spectre_v2_in_ibrs_mode()-controle om STIBP in te schakelen (standaard via seccomp/prctl() of altijd aan, indien geselecteerd door de spectre_v2_user kernel cmdline-parameter).”
Dus om gebruikersruimtethreads met STIBP te beschermen, deze patch door Google-technicus KP Singh wordt eview om STIBP mogelijk te maken met de”legacy”IBRS. Nogmaals, dit is alleen van invloed op oudere processors die vertrouwen op gewone IBRS, zoals die van Skylake/Skylake-afgeleide ontwerpen. De patch is al gemarkeerd voor back-porting naar stabiele Linux-kernelseries, ook als deze eenmaal is gemainlined.
Voor degenen die gewone IBRS-systemen gebruiken, is er met Linux 6.2 ook de nieuwe Call Depth Tracking-functie die minder duur is dan IBRS voor het verminderen van Spectre V2. Maar toch blijven de geaccumuleerde prestatiekosten voor al deze verschillende maatregelen, met name op oudere systemen uit het Skylake-tijdperk, vrij hoog.