[llvm-dev] [RFC] Zeroing Caller Saved Regs

Kees Cook via llvm-dev llvm-dev at lists.llvm.org
Wed Aug 12 14:59:36 PDT 2020


On Wed, Aug 12, 2020 at 02:44:59PM -0700, Bill Wendling wrote:
> My guess is that inserting zeroing instructions right before the "ret"
> instruction can disable some of the hacks we see with ROP:
> 
>    `pop rdi ; ret` becomes `pop rdi ; xor rdi, rdi ; ret`

Right; this isn't meant to be a perfect defense. Nothing can be, really.
But it narrows the opportunities available to an attacker (whether it be
ROP, exposures, speculation, etc). The more deterministic the execution
paths, the lower the chance that each given path is both useful (i.e.
does work that helps an attacker) and available (i.e. can be "reached"
through some specific bug) to an attacker.

Given the near-zero cost (in both runtime and code size) of self-xor-ing
registers, it's a "free" change that has a greater-than-zero cost to an
attacker.

-- 
Kees Cook


More information about the llvm-dev mailing list