On Thu, 6 Aug 2020, Kees Cook wrote:

> On Thu, Aug 06, 2020 at 10:37:43AM +0200, Richard Biener wrote:
> > OK, so -fzero-call-used-regs is a ROP mitigation technique.  To me
> > it sounded more like a mitigation against information leaks which
> > then would be highly incomplete w/o spill slot clearing.  Like
> > we had that discussion on secure erase of memory that should not
> > be DSEd.
> 
> I've viewed stack erasure as separate from register clearing. The
> "when" of stack erasure tends to define which things are being defended
> against. If the stack is being erased on function entry, you're defending
> against all the various "uninitialized" variable attacks (which can be
> info exposures, flow control redirection, etc). If it's on function exit,
> this is more aimed at avoiding stale data and minimizing what's available
> during an attack (and it also provides similar "uninit" defenses, just
> in a different way). And FWIW, past benchmarks on this appear to indicate
> erase-on-entry is more cache-friendly.

So I originally thought this was about leaking security sensitive data
to callers and thus we want to define API entries to not leak any
data from callees other than via the ABI defined return values or
global memory the callee chooses to populate.  Clearing registers
not involved in returning data is one part but then contents of such
registers could also reside in spill slots which means you have to
clear those as well.  And yes, even local automatic variables of the
callee fall into the category and thus 'stack-erasure' would be
required.  To appropriately have such a "security boundary" at
function return you _do_ have to do the clearing at function return
though.

But it's a completely different topic and it seems the patch was
not intended to help the folks that also ask for "secure"_memset
the compiler isn't supposed to optimize away as dead.

Richard.

Reply via email to