  Multi-Variant Execution Environments (MVEEs) are a promising technique to
protect software against memory corruption attacks. They transparently execute
multiple, diversified variants (often referred to as replicae) of the software
receiving the same inputs. By enforcing and monitoring the lock-step execution
of the replicae's system calls, and by deploying diversity techniques that
prevent an attacker from simultaneously compromising multiple replicae, MVEEs
can block attacks before they succeed.
  Existing MVEEs cannot handle non-trivial multi-threaded programs because
their undeterministic behavior introduces benign system call inconsistencies in
the replicae, which trigger false positive detections and deadlocks in the
MVEEs. This paper for the first time extends the generality of MVEEs to protect
multi-threaded software by means of secure and efficient synchronization
replication agents. On the PARSEC 2.1 parallel benchmarks running with four
worker threads, our prototype MVEE incurs a run-time overhead of only 1.32x.
