  Out-of-order speculation, a technique ubiquitous since the early 1990s,
remains a fundamental security flaw. Via attacks such as Spectre and Meltdown,
an attacker can trick a victim, in an otherwise entirely correct program, into
leaking its secrets through the effects of misspeculated execution, in a way
that is entirely invisible to the programmer's model. This has serious
implications for application sandboxing and inter-process communication.
  Designing efficient mitigations, that preserve the performance of
out-of-order execution, has been a challenge. The speculation-hiding techniques
in the literature have been shown to not close such channels comprehensively,
allowing adversaries to redesign attacks. Strong, precise guarantees are
necessary, but at the same time mitigations must achieve high performance to be
adopted. We present Strictness Ordering, a new constraint system that shows how
we can comprehensively eliminate transient side channel attacks, while still
allowing complex speculation and data forwarding between speculative
instructions. We then present GhostMinion, a cache modification built using a
variety of new techniques designed to provide Strictness Order at only 2.5%
overhead.
