<div dir="ltr"><span style="font-size:12.8px">Hi all,</span><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">I've been trying to figure out if there is a feasible way to prevent values from ever spilling from registers to the stack. I've looked for code or documentation on how to do this but haven't found anything, apologies if this has already been done.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Recent security research has shown that protection schemes such as CFI (that might otherwise be secure) are undermined by sensitive values spilling to the stack. When security-critical values spill from registers to the stack, they can be read and overwritten by an attacker with arbitrary memory read or write capabilities. See "Losing Control" from CCS 2015 for more details on this sort of attack: <a href="https://www.ics.uci.edu/~perl/ccs15_stackdefiler.pdf" target="_blank">https://www.ics.uci.edu/~perl/ccs15_stackdefiler.pdf</a></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">I think it would be great if we could allow values or at least virtual regs to be tagged as "security-sensitive" and disallow spilling of these values across their lifetime. I expect that the best way to do this would be to start at the virtual register level and push support up to IR values as well if and only if machine IR turns out to be insufficient.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Is this a good idea? Does something to support register pinning already exist? I'm unfortunately not familiar enough with the register allocators to know how to best support this, although I'm willing to give it a try if people can point me in the right direction.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Thanks,</div><div style="font-size:12.8px">Stephen</div></div>