Re: Smatch check for Spectre stuff

From: Alan Cox
Date: Wed Apr 25 2018 - 10:49:33 EST


> 2) Compiler transformations can elide binary operations, so we cannot
> rely on source level AND (&) or MOD (%) operations to narrow the
> range of an expression, regardless of the types of either operand.
>
> This means that source-level AND and MOD operations cannot be relied
> upon under speculation.

You need to use volatiles and memory barriers if trying to do it
explicitly in C. The compilers will do some really quite insanely
brilliant things otherwise. That's one reason that not using fences is
really tricky and belongs wrapped in helpers.

> I suspect this means *many* more potential spectre gadgets. :(

I expect so as well as probably a lot of false positives - the tools in
the space are all pretty new.

Array access isn't always needed either. Remember that something as
simple as

x = size_table[user];
memset(buf, 0, x);

can speculatively reveal things, as can 'classical' side channels such as
variable length instruction timings.

Alan