On 01/05/2018 03:40 AM, Richard Earnshaw (lists) wrote: > On 05/01/18 09:44, Richard Biener wrote: >> On Thu, Jan 4, 2018 at 2:58 PM, Richard Earnshaw >> <richard.earns...@arm.com> wrote: >>> >>> Recently, Google Project Zero disclosed several classes of attack >>> against speculative execution. One of these, known as variant-1 >>> (CVE-2017-5753), allows explicit bounds checks to be bypassed under >>> speculation, providing an arbitrary read gadget. Further details can >>> be found on the GPZ blog [1] and the documentation that is included >>> with the first patch. >>> >>> This patch set adds a new builtin function for GCC to provide a >>> mechanism for limiting speculation by a CPU after a bounds-checked >>> memory access. I've tried to design this in such a way that it can be >>> used for any target where this might be necessary. The patch set >>> provides a generic implementation of the builtin and then >>> target-specific support for Arm and AArch64. Other architectures can >>> utilize the internal infrastructure as needed. >>> >>> Most of the details of the builtin and the hooks that need to be >>> implemented to support it are described in the updates to the manual, >>> but a short summary is given below. >>> >>> TYP __builtin_load_no_speculate >>> (const volatile TYP *ptr, >>> const volatile void *lower, >>> const volatile void *upper, >>> TYP failval, >>> const volatile void *cmpptr) >>> >>> Where TYP can be any integral type (signed or unsigned char, int, >>> short, long, etc) or any pointer type. >>> >>> The builtin implements the following logical behaviour: >>> >>> inline TYP __builtin_load_no_speculate >>> (const volatile TYP *ptr, >>> const volatile void *lower, >>> const volatile void *upper, >>> TYP failval, >>> const volatile void *cmpptr) >>> { >>> TYP result; >>> >>> if (cmpptr >= lower && cmpptr < upper) >>> result = *ptr; >>> else >>> result = failval; >>> return result; >>> } >>> >>> in addition the specification of the builtin ensures that future >>> speculation using *ptr may only continue iff cmpptr lies within the >>> bounds specified. >> >> I fail to see how the vulnerability doesn't affect aggregate copies >> or bitfield accesses. The vulnerability doesn't cause the loaded >> value to leak but (part of) the address by populating the CPU cache >> side-channel. >> > > It's not quite as simple as that. You'll need to read the white paper > on Arm's web site to get a full grasp of this (linked from > https://www.arm.com/security-update). I actually recommend reading the original papers referenced by Google in addition to the ARM whitepaper. This stuff is far from intuitive. I've been loosely involved for a month or so, but it really didn't start to click for me until right before the holiday break.
jeff