I've been thinking about the issues with securely zero'ing buffers that Colin Percival discusses in his <a href="http://www.daemonology.net/blog/2014-09-06-zeroing-buffers-is-insufficient.html">blog article</a>, and I think I'd like to take a stab at fixing it in clang. Here's my proposal:<div><br></div><div>Add a function attribute, say __attribute__((clear_regs_on_return)) which when a thus annotated function returns will zero all callee owned registers and spill slots. Then, all unused caller owned registers will be immediately cleared by the caller after return.</div><div><br></div><div>As for why, I'm concerned with the case where a memory disclosure vulnerability exposes all or a portion of sensitive data via either spilled registers or infrequently used registers (xmm). If an attacker is able to analyze a binary for situations wherein sensitive data will be spilled, leveraging a memory disclosure vulnerability it's likely one could craft an exploit that reveals sensitive data.</div><div><br></div><div>What does the list think?</div><div>-Russ Harmon</div>