3 ms·
I couldn't find much about this 16 entries stack depth issue. Does anyone have more information?
by gtirloni 9y ago
I couldn't find much about this 16 entries stack depth issue. Does anyone have more information?
- bonzini 9y agoIt's explained in the thread. Basically, the RET instruction has its own tiny branch predictor, the return address stack (also known as RSB) which is only 16 or 32 entries deep. If your call stack is deeper than that, sooner or later the stack becomes empty. In this case, old processors simply does not predict the jump and stalls. But Skylake instead uses the generic indirect branch predictor, since after all RET is an indirect branch! Except the idea behind retpolines was to avoid the generic branch predictor, and now every single RET can use it! So, if you don't want to use IBRS you need to find a different way to protect the kernel from someone forcing undesired speculative execution after the RET.
- gtirloni 9y agoRSB! Thank you, now I know what to focus on.