[msan] Fix invalid origin copying.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Thu, 24 Oct 2013 11:56:03 +0000 (11:56 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Thu, 24 Oct 2013 11:56:03 +0000 (11:56 +0000)
commitd280ee48e85b554f84ee4cd0951bb88f8459a34b
tree8d23ee45e1b2e68a758164a46c7eda57991a3950
parentf2fd459a5bb2c571781284c567c2fbe5d51f1a0a
[msan] Fix invalid origin copying.

Origin copying may destroy valid origin info. This is caused by
__msan_copy_origin widening the address range to the nearest 4-byte aligned
addresses both on the left and on the right. If the target buffer is
uninitialized and the source is fully initialized, this will result in
overriding valid origin of target buffer with stale (possibly 0) origin of the
source buffer.

With this change the widened origin is copied only if corresponding shadow
values are non zero.

llvm-svn: 193338
compiler-rt/lib/msan/msan.h
compiler-rt/lib/msan/msan_interceptors.cc
compiler-rt/lib/msan/tests/msan_test.cc