A partir de la versión 8 (posterior a la versión 7.3), GCC ha agregado el soporte de retpoline [ 0] . Aunque entiendo que está destinado a [citación necesaria] para su uso en parches del kernel para Spectre (es decir, [1] [2] ), eso no impide que los desarrolladores normales usen esas banderas.
Como tal, ¿debo usar los indicadores para retpoline ( -mindirect-branch
, -mfunction-return
y relacionados)?
Por ejemplo, he escrito un programa de generación de contraseñas criptográficamente seguro en C [3] . Cuando compilo usando -mindirect-branch=thunk -mfunction-return=thunk
, el binario resultante es diferente de no usar esas banderas, presumiblemente desde el cambio entre llamada y salto para llamar y devolver el procesador. ¿Hay alguna razón para hacer esto, o algún beneficio desde una perspectiva de seguridad?