A partire dalla versione 8 (successivamente backported alla 7.3), GCC ha aggiunto il supporto per retpoline [ 0] . Mentre capisco che è inteso [citazione necessaria] per l'uso nel patching del kernel per Spectre (es .: [1] [2] ), che non impedisce ai normali sviluppatori di utilizzare quelle bandiere.
In quanto tale, dovrei usare i flag per retpoline ( -mindirect-branch
, -mfunction-return
e correlati)?
Ad esempio, ho scritto un programma di generazione password protetto da crittografia in C [3] . Quando compilo usando -mindirect-branch=thunk -mfunction-return=thunk
, il binario risultante è diverso da quello senza l'uso di quei flag, presumibilmente dallo switch tra call e jump to call e return thunk. C'è qualche ragione per farlo o qualche vantaggio dal punto di vista della sicurezza?