tsan: tolerate munmap with invalid arguments
authorDmitry Vyukov <dvyukov@google.com>
Thu, 2 Dec 2021 12:35:04 +0000 (13:35 +0100)
committerDmitry Vyukov <dvyukov@google.com>
Thu, 2 Dec 2021 16:50:51 +0000 (17:50 +0100)
commit1b576585eba4d08d5c97c39f5f43d0bf6eed4e4e
tree616587be7bd2444743b0098bed4b71bf01c68c6d
parent92fbd76af525095197188c862db2c4f5b96a8a73
tsan: tolerate munmap with invalid arguments

We call UnmapShadow before the actual munmap, at that point we don't yet
know if the provided address/size are sane. We can't call UnmapShadow
after the actual munmap becuase at that point the memory range can
already be reused for something else, so we can't rely on the munmap
return value to understand is the values are sane.
While calling munmap with insane values (non-canonical address, negative
size, etc) is an error, the kernel won't crash. We must also try to not
crash as the failure mode is very confusing (paging fault inside of the
runtime on some derived shadow address).

Such invalid arguments are observed on Chromium tests:
https://bugs.chromium.org/p/chromium/issues/detail?id=1275581

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D114944
compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
compiler-rt/test/tsan/munmap_invalid.cpp [new file with mode: 0644]